/*
TASK: family
LANG: C++
*/
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int n,current=1,pri;
string A[1001];
int family[1001];
bool syvpad(string a,string b)
{if(a.size()!=b.size()) return false;
 int differences=0;
 for(int i=0;i<a.size();i++)
     {  int p=b.find(a[i]);
         if(p<0 || p>=b.size()) differences++;
         else b[p]='-';         
     }
 if(differences<=1) return true;
 else return false;
} 
void move(int a,int b)
{for(int i=0;i<n;i++)
   if(family[i]==a) family[i]=b;
}  
void init()
{cin>>n;
 for(int i=0;i<n;i++)
     {cin>>A[i]; family[i]=0;}
}
void out()
{int broika=1,broi,max=0;
sort(&family[0],&family[n]);
int i=0;
while(family[i]==0) i++;
broi=family[i];
for(i=i+1;i<n;i++)
   if(family[i]==broi){ broika++;}
   else {
         if(broika>max) max=broika;
         broika=1;
         broi=family[i];
        }
if(broika>max) max=broika;
cout<<max<<endl;
}
int main()
{init();
 for(int i=0;i<n;i++)
    {if(family[i]==0) {pri=current;family[i]=pri;current++;}
     else pri=family[i];
     for(int j=i+1;j<n;j++)
        {
         if(syvpad(A[i],A[j])) {if(family[j]==0) {family[j]=pri;}
                                else move(family[j],pri); }                
        }        
    }
 out();
 return 0;
}
