{
TASK:abc
LANG:PASCAL
}
var a:array[1..1000]of string[25];
    swp:string[25];
    n,i,j,bla,max,br:integer;
    vals:array[1..25]of longint;
    divs:array[1..1000]of longint;
    NUM,divnum:word;

procedure eliminate;
 var fi,fj:integer;
  begin

   for fi:=1 to n-1 do
    for fj:=fi+1 to n do
     begin
      if pos(a[fi],a[fj])>0 then
       a[fj]:='';
      if max<length(a[fi]) then max:=length(a[fi]);
     end;
   for fi:=1 to n do
    if max<length(a[fi]) then max:=length(a[fi]);


  end;

  procedure numsanddivs;
   var i,j:integer;
    begin
     br:=0;
     for i:=1 to n do
      if length(a[i])>0 then
       begin
        inc(br);
        divs[br]:=vals[length(a[i])];
       end;
    end;

 function nod(x,y:word):word;
  begin
   while x<>y do
    if x>y then x:=x-y
    else        y:=y-x;
   nod:=x;
  end;

 procedure add;
  var i,j,todiv:WORD;
   begin
    for i:=1 to br do
     Num:=Num+vals[max] div divs[i];
    todiv:=nod(num,vals[max]);
    Num:=Num div todiv;
    Divnum:=vals[max] div todiv;
   end;

begin
 max:=-1;
 vals[1]:=4;
 for i:=2 to 21 do
  vals[i]:=vals[i-1]*4;

 readln(n);
 for i:=1 to n do
  readln(a[i]);

 for i:=1 to n-1 do
  for j:=i+1 to n do
   if a[i]>a[j] then
    begin
     swp:=a[i];
     a[i]:=a[j];
     a[j]:=swp;
    end;

 eliminate;
 numsanddivs;
 add;
 writeln(num,' ',divnum);

end.
