Manacher
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 9;
char s[N];
int p[N];
int mian()
{
cin >> s + 1;
int n = strlen(s + 1);
for (int i = 2 * n + 1; i >= 1; --i)s[i] = (i & 1) ? '#' : s[i >> 1];
s[0] = '^', s[2 * n + 2] = '$';
int C = 0, R = 0;
for (int i = 1; i <= 2 * n + 1; ++i){
p[i] = i < R ? min(R - i, p[2 * C - i]) : 1;
while (s[i + p[i]]== s[i - p[i]])p[i]++;
if (i + p[i]>R)C = i, R = i + p[i];
}
int ans = 0;
for (int i = 1; i <= 2 * n + 1; ++i)ans = max(ans, p[i] - 1);
cout << ans << "\n";
return 0;
}