#include #define rep(i,a,b) for (int i=a; i PII; typedef vector VI; typedef long long ll; typedef long double ld; void manacher (string &s, vector &r) { int n = (int)s.size(); r.clear(); r.resize(n, 1); int p = 0; while (p>n >>s; vector r1, r2; int res =n ; string t; //parzysty rep(i,0,n) { if (i>0) t.pb('#'); t.pb(s[i]); } manacher(s, r1); manacher(t, r2); rep(i,0,n) { if (r1[i]+i==n-1) //palindrom dochodzi { res = min(res, i-r1[i]); } } rep(i,0,(int)r2.size()) if (i%2==1) { int r = (r2[i]+1)/2; if ((i/2)+r==n-1) { res = min(res, i/2-(r-1)); } } printf ("%d\n", res); }