#include <iostream>
#include <math.h>
using namespace std;
int n;
string S[1003];
void read()
{
cin>>n;
for (int i=1; i<=n; i++)
cin>>S[i];
}
int F[31][31];
void init()
{
for (int i=0; i<=30; i++)
for (int j=0; j<=30; j++)
F[i][j]=0;
}
int LCS(string S1, string S2)
{
init();
for (int i=0; i<S1.length(); i++)
{
for (int j=0; j<S2.length(); j++)
{
if (S1[i]==S2[j])
F[i+1][j+1]=F[i][j]+1;
else
F[i+1][j+1]=max(F[i][j+1], F[i+1][j]);
}
}
return F[S1.length()][S2.length()];
}
int main ()
{
int t;
cin>>t;
while (1)
{
if (t==0) break;
t--;
read();
int maxLCS = 0;
for (int i=1; i<=n; i++)
{
for (int j=i+1; j<=n; j++)
maxLCS = max(maxLCS, LCS(S[i], S[j]));
}
cout<<maxLCS<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWF0aC5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG47CnN0cmluZyBTWzEwMDNdOwp2b2lkIHJlYWQoKQp7CiAgICBjaW4+Pm47CiAgICBmb3IgKGludCBpPTE7IGk8PW47IGkrKykKICAgICAgICBjaW4+PlNbaV07Cn0KCmludCBGWzMxXVszMV07CnZvaWQgaW5pdCgpCnsKICAgIGZvciAoaW50IGk9MDsgaTw9MzA7IGkrKykKICAgICAgICBmb3IgKGludCBqPTA7IGo8PTMwOyBqKyspCiAgICAgICAgICAgIEZbaV1bal09MDsKfQoKaW50IExDUyhzdHJpbmcgUzEsIHN0cmluZyBTMikKewogICAgaW5pdCgpOwogICAgCiAgICBmb3IgKGludCBpPTA7IGk8UzEubGVuZ3RoKCk7IGkrKykKICAgIHsKICAgICAgICBmb3IgKGludCBqPTA7IGo8UzIubGVuZ3RoKCk7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChTMVtpXT09UzJbal0pCiAgICAgICAgICAgICAgICBGW2krMV1baisxXT1GW2ldW2pdKzE7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIEZbaSsxXVtqKzFdPW1heChGW2ldW2orMV0sIEZbaSsxXVtqXSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIEZbUzEubGVuZ3RoKCldW1MyLmxlbmd0aCgpXTsKfQoKaW50IG1haW4gKCkKewogICAgaW50IHQ7CiAgICBjaW4+PnQ7CiAgICB3aGlsZSAoMSkKICAgIHsKICAgICAgICBpZiAodD09MCkgYnJlYWs7CiAgICAgICAgdC0tOwogICAgICAgIHJlYWQoKTsKICAgICAgICBpbnQgbWF4TENTID0gMDsKICAgICAgICBmb3IgKGludCBpPTE7IGk8PW47IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGo9aSsxOyBqPD1uOyBqKyspCiAgICAgICAgICAgICAgICBtYXhMQ1MgPSBtYXgobWF4TENTLCBMQ1MoU1tpXSwgU1tqXSkpOwogICAgICAgIH0KICAgICAgICBjb3V0PDxtYXhMQ1M8PGVuZGw7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==