/*
TASK:abc
LANG:C++
*/
#include <iostream>
using namespace std;
char tr[1001][30];
bool used[1001];
long long pows[30];
int sol[1001],n;
void add(int a)
{
     int len=strlen(tr[a]);
     sol[len]++;
     for(int i=a+1;i<=n;i++)
     {
             int flag=0;
             for(int j=0;j<len;j++)
             {
                     
                     if(tr[a][j]!=tr[i][j]) {flag=1;break;}
             }
             if(flag==0) used[i]=1;
     }
}
int findMax()
{
    int maX=0;
    for(int i=1;i<=22;i++)
            if(sol[i]!=0 && i>maX) maX=i;
            
    return maX;
}
void simple(int m)
{
     int a=sol[m],b=pows[m];
     while(a%2==0 && b%2==0)
                  {a/=2;b/=2 ;}
                  
                  cout<<a<<" "<<b<<endl;
}
int main()
{
    pows[0]=1;
    for(int i=1;i<=22;i++)
            pows[i]=4*pows[i-1];
            
    cin>>n;
    for(int i=1;i<=n;i++)
            cin>>tr[i];
    
    for(int j=1;j<=n;j++)
            if(!used[j])
                        add(j);
                                        
            
    int m=findMax();
    for(int i=1;i<m;i++)
            if(sol[i]!=0)
                         sol[m]+=sol[i]*pows[m-i];
                         
    simple(m);


    
//    cout<<sol[m]<<" "<<pows[m];
                       return 0;
}
