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) : real; var l, p : TStrom; begin if s.pocet = 0 then begin permutace := 1; end else begin l := podstrom(s, true); p := podstrom(s, false); permutace := (permutace(l) * permutace(p)* fact(l.pocet + p.pocet)) div (fact(l.pocet) * fact(p.pocet));{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); } end; begin readln(s.pocet); while s.pocet > 0 do begin nacti(s); writeln(permutace(s):0:0); readln(s.pocet); end; end.