#include #include #include #include #include #include #include #include #include #include using namespace std; //palindrome class Manacher{ string s; int n; vector radius; public: Manacher(string &s_){ n = s_.size(); s = string(2*n+1, '#'); for(int i=0; i(n, -1); for(int i=0, j=0; i= n) break; if(s[i-j] == s[i+j]) j++; else break; } radius[i] = j; int k = 1; while(1){ if(i-k < 0 || i+k >= n) break; if(radius[i-k] < radius[i] - k){ radius[i+k] = radius[i-k]; k++; }else break; } i += k; j = max(j-k, 0); } } int get_longest_palindrome(){ return (int)*max_element(radius.begin(), radius.end()); } int count_palindromes(){ int MOD = 1000000007; vector sum(n+10, 0); for(int i=0; i tmp(2, 0); for(int i=1; i<=n; i++){ tmp[i&1] += sum[i]; tmp[i&1] %= MOD; ret += tmp[i&1] * i; ret %= MOD; } return ret; } }; int main(){ string s; cin >> s; int ans = 1; int n = s.size(); for(int i=1; i v = {x.get_longest_palindrome()-1, y.get_longest_palindrome()-1}; ans = max({ans, v[0], v[1]}); } cout << ans << endl; return 0; }