#include<stdio.h>
#include<iostream>
#include<string>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 2005;
const int inf = 1<<30;
int n;
int map[maxn][maxn],dis[maxn];
bool vis[maxn];
string str[maxn];
int getDis( int a,int b )
{
int cnt = 0;
for( int i = 0; i < str[a].length(); i ++ )
if( str[a][i] != str[b][i] )
cnt ++;
return cnt;
}
int prime( int s )
{
int ans = 0;
memset(vis,0,sizeof(vis));
for( int i = 0; i < n; i ++ )
dis[i] = map[s][i];
vis[s] = true;
for( int i = 1; i < n; i ++ ){
int min = inf,p = s;
for( int j = 0; j < n; j ++ )
if( !vis[j] && dis[j] < min )
min = dis[p=j];
ans += min;
vis[p] = true;
for( int j = 0; j < n; j ++ ){
if( dis[j] > map[p][j] )
dis[j] = map[p][j];
}
}
return ans;
}
int main()
{
//freopen("data.txt","r",stdin);
while( scanf("%d",&n) != EOF,n ){
for( int i = 0; i < n; i ++ )
cin >> str[i];
for( int i = 0; i < n; i ++ ){
map[i][i] = 0;
for( int j = i+1; j < n; j ++ )
map[i][j] = map[j][i] = getDis( i,j );
}
printf("The highest possible quality is 1/%d.\n",prime(0));
}
return 0;
}