manacher
#include <iostream>
#include <vector>
using namespace std;
int manacher(string str) {
// a b
// $*a*b*^
// $*a*b*a*^
string astr;
astr += '$';
int ret = 1;
for ( auto c: str)
astr += '*',astr += c;
astr += '*',astr += '^';
vector<int> p_len(astr.size(), 1);
int a_sz = astr.size();
int center = 0;
for ( int i = 1; i < a_sz; ++i) {
int lb = 2 * center - i;
int exLen = min(center + p_len[center] - i, p_len[lb]);
int l = i - p_len[i];
int r = i + p_len[i];
while ( ~l && r < a_sz && astr[l] == astr[r]) {
p_len[i]++;
--l;
++r;
}
// cout << p_len[i] << " ";
ret = max(p_len[i] - 1, ret);
if ( r >= center + p_len[center]) {
center = i;
}
}
return ret;
}
int main() {
string str;
getline(cin, str);
int ans = manacher(str);
cout << ans;
return 0;
}
// 64 位输出请用 printf("%lld")