马拉车,感觉对但过不去
#include<bits/stdc++.h>
using namespace std;
int p[22000010],t;
char a[22000010],c;
int main(){
cin>>t;
c=getchar();
while(t--){
int mx=0,mid=0,n=0,ans=0;
memset(p,0,sizeof(p));
a[0]='#';
c=getchar();
while(c>='a'&&c<='z'){
a[++n]=c;
a[++n]='#';
c=getchar();
}
for(int i=0;i<n;i++){
p[i]=(i<mx) ? min(p[mid*2-i],mx-i) : 1;
while(i+p[i]<=n&&i-p[i]>=0&&a[i+p[i]]==a[i-p[i]])p[i]++;
if(i+p[i]>mx){
mx=i+p[i];
mid=i;
}
ans=max(ans,p[i]);
}
cout<<ans-1<<endl;
}
return 0;
}