#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
#define maxn 2002
#define inf 0x7fffffff
char s[maxn][8];
//int map[maxn][maxn];
//裸最小生成树
int dis(char s1[],char s2[])
{
int sum=0;
for(int i=6;1+i;i--)
{
sum+=(s1[i]!=s2[i]);
}
return sum;
}
struct Code{int x;int y;int w;}node[maxn*maxn/2+10];
bool cmp(struct Code A,struct Code B)
{
return A.w<B.w;
}
int fa[maxn*maxn/2];
int find(int x)
{
return x==fa[x]?x:(fa[x]=find(fa[x]));
}
int main()
{
int n;
while(1==scanf("%d",&n)&&n)
{
for(int i=1;i<=n;i++)
{scanf("%s",s[i]);fa[i]=i;}
int num=0;
for(int i=1;i<=n;i++)
for(int j=1;j<i;j++)
{
//map[i][j]=map[j][i]=dis(s[i],s[j]);
node[num].w=dis(s[i],s[j]);
node[num].x=i;
node[num++].y=j;
}
sort(node,node+num,cmp);
int ans=0;
for(int i=0;i<num;i++)
{
int a=node[i].x;
int b=node[i].y;
int ta=find(a);
int tb=find(b);
if(ta==tb)
{
continue;
}
else
{
ans+=node[i].w;
if(ta<tb)
{
fa[tb]=ta;
}
else fa[ta]=tb;
}
}
printf("The highest possible quality is 1/%d.\n",ans);
}
return 0;
}