manecher
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; char a[1000001],s[2000005]; int n,l,p[2000005],ans,k=-1,m=1; void manacher() { int pos=0,id=0,x=0; for(int i=2;i<=n-2;i++) { if(pos<=i) x=1; else x=min(p[2*id-i],pos-i); while(s[i+x]==s[i-x]) x++; p[i]=x; if(i+x>pos) { pos=i+x; id=i; } } } int main() { while(cin>>a) { if(a[0]=='E') return 0; ans=0,n=0; l=strlen(a); s[n++]='%'; for(int i=0;i<l;i++) { s[n++]='#'; s[n++]=a[i]; } s[n++]='#'; s[n]='@'; manacher(); for(int i=1;i<=n;i++) if(ans<p[i]) { ans=p[i]; k=i; } if(s[k]=='#') printf("Case %d: %d\n",m++,ans/2*2); else printf("Case %d: %d\n",m++,ans/2*2-1); } }