/*
TASK: abc
LANG: C++
*/
#include <iostream>
#include <string>
#include <iostream>
#include <math.h>

int min(int a, int b)
{
    return a < b ? a : b;
}
using namespace std;
long long drob[1000];
long long result = 0;
long long gcd(int a, int b)
{
     if (b == 0)
      return a;
     return gcd(b, a%b);
}
int main()
{
    char niz[1000][21];
    int n;
    cin >> n;
    
    int len[21];
    
    for (int i = 0; i < n; i++)
    {
        cin >> niz[i];
        len[i] = strlen(niz[i]);
    }
    
    for (int i = 0; i < n - 1; i++)
     for (int j = i + 1; j < n; j++)
     { 
         int minn = min(len[i], len[j]);
         int k = 0;
         for (; k < minn; k++)
          if (niz[i][k] != niz[j][k])
           break;
           
         if (k == minn)
          if (len[i] < len[j]) niz[j][0] = 'n';
          else niz[i][0] = 'n';
     }
    
    int d = 0;
    for (int i = 0; i < n; i++)  
    {
        if (niz[i][0] == 'n') continue;
        drob[d++] = (long long)pow(4, len[i]);
    }
    
    int a = drob[0];
    for (int i = 1; i < d; i++)
     a = (a*drob[i])/gcd(a, drob[i]);
    
    for (int i = 0; i < d; i++)
    {
        result += a/drob[i]; 
    }
    
    int g = gcd(result, a);
    result /= g;
    a /= g;
    
    cout << result << " " << a << endl;
    //system("pause");
    return 0;
}  

        
    
    
    
     
