#include<iostream>
#include<cstring>
using namespace std;
const int N=110010;
string s,b;
int l[N];
int k=0,r=0,j=0,n=0,ans=0;
void gets(){
b="";
b[0]='@';
int i=0,pos=1;
for(;i<n;i+=1,pos+=2){
b[pos]=s[i];
b[pos+1]='#';
}
b[pos-1]='%';
n=pos-1 ;
}
int main(){
while(cin>>s){
memset(l,0,sizeof(l));
if(s.size()==0) continue;
k=0,r=0,j=0,n=s.size(),ans=0;
gets();
for(int i=1;i<n;i++){
if(i<r) l[i]=min(l[2*k-i],r-i);
else l[i]=1;
while(b[i-l[i]]==b[i+l[i]]) l[i]++;
if(i+l[i]>r) k=i,r=i+l[i];
ans=max(ans,l[i]);
}
cout<<ans<<endl;
}
return 0;
}
普普通通的一个马拉车模版