/kel,有人给个hack也行
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5,mod=1e9+7,INF=2e9;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<double,double> pdd;
#define qmi(a,b) a=min(a,b)
#define qma(a,b) a=max(a,b)
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define atrep(i,l,r) for(int i=(r);i>=(l);i--)
#define vec vector<int>
#define pb push_back
char s[N];
int sa[N],rnk[N],tp[N],tax[N],n,M;
void qsort(){
rep(i,0,M) tax[i]=0;
rep(i,1,n) tax[rnk[i]]++;
rep(i,0,M) tax[i]+=tax[i-1];
atrep(i,1,n) sa[tax[rnk[tp[i]]]--]=tp[i];
}
void get_sa(){
M=2005;
rep(i,1,n) tp[i]=i,rnk[i]=s[i]-'a';
qsort();
for(int w=1,p=0;w<=n;M=p,w<<=1){
p=0;
rep(i,1,w) tp[++p]=n-w+i;
rep(i,1,n) if(sa[i]>w) tp[++p]=sa[i]-w;
qsort();
swap(tp,rnk);
rnk[sa[1]]=p=1;
rep(i,2,n) rnk[sa[i]]=(tp[sa[i]]==tp[sa[i-1]]&&tp[sa[i]+w]==tp[sa[i-1]+w])?p:++p;
}
}
int he[N];
void get_height(){
int k=0;
rep(i,1,n){
if(k) k--;
int j=sa[rnk[i]-1];
while(i+k<=n&&j+k<=n&&s[i+k]==s[j+k]) k++;
he[rnk[i]]=k;
}
}
int st[N][23];
void stable(){
for(int i=1;i<=n;i++) st[i][0]=he[i];
for(int j=1;j<=20;j++){
for(int i=1;i+(1<<j)-1<=n;i++){
st[i][j]=min(st[i][j-1],st[i+(1<<(j-1))][j-1]);
}
}
}
int query(int l,int r){
if(l>r) swap(l,r);
int k=(int)log2(r- ++l+1);
return min(st[l][k],st[r-(1<<k)+1][k]);
}
void init(){
memset(sa,0,sizeof sa);
memset(rnk,0,sizeof rnk);
memset(he,0,sizeof he);
memset(st,0,sizeof st);
memset(tax,0,sizeof tax);
}
void solve(){
init();
cin>>n;
rep(i,1,n){
char tmp[3];
scanf("%s",tmp);
s[i]=tmp[0];
}
get_sa();
get_height();
stable();
int ans=1;
int lqaq=0,rqaq=0;
rep(len,1,n){
for(int i=1;i+len<=n;i+=len){
int k=query(rnk[i],rnk[i+len]),res=k/len+1;
int l=i-(len-k%len);
if(l>0) res+=k>len;
if(res>ans){
ans=res;
}
}
}
cout<<ans<<"\n";
}
int main(){
int T;
cin>>T;
while(T--) solve();
}