#include #define st first #define nd second #define fi first #define se second #define pb push_back #define ps(v) cout << v << " " #define pln(v) cout << v << "\n" #define entr cout << "\n" using namespace std; typedef long long ll; typedef long double ld; typedef pair pll; /* int solve(int n, string a) { string c; for (int i = 0; i < n; i++) { c.push_back(a[i]); c.push_back('#'); } c.push_back('$'); int s = c.size(); vector P(s); for (int i = 0, k = 0; i < s; i++) { if (k+P[k] > i) { P[i] = max(1, min(P[2*k-i], k+P[k]-i)); } while (P[i] <= i && c[i+P[i]] == c[i-P[i]]) { P[i]++; } if (i+P[i] > k+P[k]) { k = i; } //cout << P[i] << " "; } //cout <= s-2) { ans = min(ans, (i-P[i]+2) / 2); } } else { //cout << i << " " << c[i] << " " << i+P[i] << " " << (i-P[i]+2)/2 <= s-1) { ans = min(ans, (i-P[i] + 2) / 2); } } //cout << ans < &P, int sh) { int g = 0; P[0] = 1 - sh; for (int i = 1; i < n; i++) { P[i] = (2*g-i > 0) ? max(min(P[2*g-i], P[g]+g-i), 0) : 0; while (i >= P[i]+sh && i+P[i] < n && w[i+P[i]] == w[i-P[i]-sh]) { P[g=i]++; } } } int solve(int n, string a) { a.push_back('$'); vector P1(n+1), P2(n+1); manacher(a, n, P1, 0); manacher(a, n, P2, 1); int ans = n-1; //cout << s <= n) { ans = min(ans, i-P1[i]+1); } //cout << ans <= n) { ans = min(ans, i-P2[i]); } //cout << ans <> n >> a; int ans = solve(n, a); cout << ans <