/*
TASK:family
LANG:C++
*/
#include <iostream>
#include <string>
#include <queue>
using namespace std;

string A[1000];
int B[1000][1000];
int N;

bool cmp(string A, string B)
{
     if(A.length()!=B.length())
     {
                               return 0;
     }
     static int a[26][2];
     for(int h=0; h<26; h++)
     {
             a[h][0] = 0;
             a[h][1] = 0;
     }
     for(int i=0; i<A.length(); i++)
     {
             a[A[i]-'A'][0]++;
             a[B[i]-'A'][1]++;
     }
     int s=0;
     for(int j=0; j<26; j++)
     {
             s+=abs(a[j][0]-a[j][1]);
             //cout<<a[j][0]<<" "<<a[j][1]<<" "<<char('A'+j)<<endl;
     }
     if(s==2||s==0) return 1;
     return 0;
}

int used[1000];

int DFS(int j)
{
    int cnt=1;
    queue <int> A;
    A.push(j);
    while(!A.empty())
    {
                     int k = A.back();
                     A.pop();
                     for(int i=0; i<N; i++)
                     {
                             if(!used[i]&&B[k][i])
                             {
                                                  used[i] = 1;
                                                  A.push(i);
                                                  cnt++;
                             }
                     }
    }
    return cnt;
}

int main()
{
    /*string H,L;
    cin>>H>>L;
    cout<<cmp(H, L);
    return 0;
    */
    
    cin>>N;
    for(int i=0; i<N; i++)
    {
            cin>>A[i];
    }
    for(int i=0; i<N; i++)
    {
            for(int j=0; j<N; j++)
            {
                    B[i][j] = cmp(A[i], A[j]);
            }
    }
    int mx = -1;
    for(int g=0; g<N; g++)
    {
            if(!used[g])
            {
                        used[g] = 1;
                        mx = max(mx, DFS(g));
            }
    }
    cout<<mx<<'\n';
    return 0;
    
}
