O(n)

#include<bits/stdc++.h>
using namespace std;
const int N=22000005;
string a;
char s[N*2]; 
int p[N*2],n,ans=1;
void yu(){
	n=a.size();
	int k=0;
	s[k++]='$';
	s[k++]='#';
	for(int i=0;i<n;i++){
		s[k++]=a[i];
		s[k++]='#';
	}
	s[k++]='&';
	n=k;
	int R=0,c;
	for(int i=1;i<n;i++){
		if(i<R){
			p[i]=min(p[c*2-i],p[c]+c-i);
		}else{
			p[i]=1;
		}
		while(s[i+p[i]]==s[i-p[i]]){
			p[i]++;
		}
		if(p[i]+i>R){
			R=p[i]+i;
			c=i;
		}
		
	}
	for(int i=0;i<n;i++){
		ans=max(ans,p[i]-1);
	
	}
	cout<<ans;
	
}
int main(){
	cin>>a;
	yu();
	return 0;
}