#include<iostream> #include<queue> #include<algorithm> #include<stdlib.h> #include<stdio.h> #include<string.h> using namespace std; const int MAX=111111<<1; char Str[MAX]; int Len; int Radius[MAX]; void Manacher() { Radius[0]=1; for (int i=1,k=0;i<Len;i++) { if (k+Radius[k]-1<i) Radius[i]=1; else Radius[i]=min(Radius[2*k-i],k+Radius[k]-i); while (Str[i-Radius[i]]==Str[i+Radius[i]]) Radius[i]++; if (k+Radius[k]-1<i+Radius[i]-1) k=i; } } int main() { while (scanf("%s",Str)!=EOF) { Len=strlen(Str); for (int i=Len;i>=0;i--) { Str[i*2+1]='#'; Str[i*2+2]=Str[i]; } Str[0]='*'; Len=Len*2+2; Manacher(); printf("%d\n",(*max_element(Radius,Radius+Len))-1); } return 0; }