program insert;

type
   TStrom =  record
		prvky : array[1..100] of integer;
		pocet : integer;
	     end;
var
   s :TStrom;



function strtoint(text :  string) : integer;
var
   hodnota, kod	:  integer;
begin
   val(text, hodnota, kod);

   strtoint := hodnota;



end;   

function kotuc(a, b :  integer) : longword;
var
   x : extended;
   i : integer;
begin
   x := 1;
   for i := 1 to b do begin
      x := x * (1 + a/i);
      



   end;
 {  writeln('K: ', round(x));
  } kotuc := round(x);

end;   


procedure nacti(var s : TStrom);
var
   znak	 : char;
   cislo :  string;
begin
   cislo := '';
  s.pocet := 0;
  while not eoln do begin
     read(znak);
     if znak <> ' ' then begin
	cislo := cislo + znak;

	
     end;
     if znak = ' ' then begin
	s.pocet := s.pocet + 1;
	s.prvky[s.pocet] := strtoint(cislo);
{	writeln(s.pocet, '. cislo:  ', cislo);
}	cislo := '';


     end;	
  end;
  s.pocet := s.pocet + 1;
  s.prvky[s.pocet] := strtoint(cislo);
{  writeln(s.pocet, '. cislo:  ', cislo);
 } cislo := '';
   


end;   

{function fact(n	:  longword) : longword;
var
   x : longword;
begin
   x := 1;
   while n > 1 do begin
      x := x * n;
      n := n - 1;

   end;   
   fact := x;

end;   }


function podstrom(s : TStrom; levy : boolean) : TStrom;
var
   s2 : TStrom;
   i  :  integer;
begin
   s2.pocet := 0;
   
   for i := 2 to s.pocet do begin
      if levy then begin
	 if s.prvky[i] < s.prvky[1] then begin
	    s2.pocet := s2.pocet + 1;
	    s2.prvky[s2.pocet] := s.prvky[i];
	 end;	 
      end;
      if not levy then begin
	 if s.prvky[i] >= s.prvky[1] then begin
	    s2.pocet := s2.pocet + 1;
	    s2.prvky[s2.pocet] := s.prvky[i];
	 end;	 
      end;
   end;   

   podstrom := s2;

end; { podstrom }



function permutace(s : TStrom) : extended;
var    l, p : TStrom;
   per, pl, pp:  extended;
begin

   if s.pocet = 0 then begin
      per := 1;


   end
   else begin
   
     l := podstrom(s, true);
     p := podstrom(s, false);

      pp := permutace(p);
      pl := permutace(l);
      
      per :=  permutace(l) * permutace(p)* kotuc(l.pocet, p.pocet);
	       {fact(l.pocet + p.pocet))
      div (fact(l.pocet) * fact(p.pocet));}
     

   end;
 {  writeln('per : ', per, ' prvky ', l.pocet, ', ', p.pocet);
   writeln('per(l) * per(p)= ',  pl * pp);
  } permutace := per;
end;

begin



   
   readln(s.pocet);
   while s.pocet > 0 do begin
      
      nacti(s);

      writeln(permutace(s):0:0);


      readln(s.pocet);

   end;   


   


















end.   