/*
TASK:family
LANG:C++
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector <string> v[1000];
int n,br=0;
string s;
void pref(int a, int b)
{
     string ss;
     while (v[b].size()>0)
     {
           ss=v[b].back();
           v[a].push_back(ss);
           v[b].pop_back();
     }
}
bool prov(string a, string b)
{
     //cout << a << ' ' << b << ' ';
     if (a.size()!=b.size()) return false;
     int u[256];
     int i,x=0;
     for (i=int('A'); i<=int('Z'); i++)
      u[i]=0;
     for (i=0; i<a.size(); i++)
      u[int(a[i])]++;
     for (i=0; i<b.size(); i++)
      u[int(b[i])]--;
     for (i=int('A'); i<=int('Z'); i++)
      if (u[i]!=0) x++;
     //cout << x << endl;
     return (x==0 || x==2);
}
void proc()
{
     int i,j,x;
     bool f=false;
     for (i=0; i<br; i++)
     {
         if (v[i][0].size()==s.size())
          for (j=0; j<v[i].size(); j++)
           if (prov(s, v[i][j]))
           {
                      if (f==false)
                      {
                                   f=true;
                                   x=i;
                                   v[x].push_back(s);
                      }
                      else
                       pref(x, i);
                      break;
           }
     }
     if (f==false)
      {
                    v[br].push_back(s);
                    br++;
      }
                      
}
int main()
{
    cin >> n;
    int i;
    for (i=0; i<n; i++)
    {
        cin >> s;
        proc();
    }
    int maxx=0,x;
    for (i=0; i<br; i++)
     //if (v[i].size()>maxx) {maxx=v[i].size(); x=i; }
     if (v[i].size()>maxx) maxx=v[i].size();
    //for (i=0; i<v[x].size(); i++)
    //  cout << v[x][i] << endl;
    cout << maxx << '\n';        
    return 0;
}
