#include using namespace std; typedef long long ll; typedef double lf; typedef pair pii; typedef pair pll; #define TRACE(x) cerr << #x << ' ' << x << endl #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define REP(i, n) FOR(i, 0, n) #define _ << ' ' << #define fi first #define sec second #define se second #define mp make_pair #define pb push_back const int MAXN = 400100; const int B[] = {1337, 10007}; const int MOD[] = {int(1e9) + 7, int(1e9) + 9}; int n; string s; int pot[2][MAXN]; int add(int a, int b, int M) { a += b; if (a >= M) a -= M; if (a < 0) a += M; return a; } int mul(int a, int b, int M) { return (ll)a * b % M; } pii H[MAXN], rev[MAXN]; pii get(int a, int b) { pii k = {0, 0}; if (a) k = {mul(H[a - 1].fi, pot[0][b], MOD[0]), mul(H[a-1].sec, pot[1][b], MOD[1])}; return {add(H[a + b - 1].fi, -k.fi, MOD[0]), add(H[a + b - 1].sec, -k.sec, MOD[1])}; } pii get_rev(int a, int b) { pii k = {0, 0}; if (a < n - 1) k = {mul(rev[a + 1].fi, pot[0][b], MOD[0]), mul(rev[a+1].sec,pot[1][b], MOD[1])}; return {add(rev[a - b + 1].fi, -k.fi, MOD[0]), add(rev[a - b + 1].sec, -k.sec, MOD[1])}; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> s; REP(j, 2) { pot[j][0] = 1; FOR(i, 1, MAXN) pot[j][i] = mul(pot[j][i-1], B[j], MOD[j]); } H[0] = {s[0], s[0]}; FOR(i, 1, n) { H[i] = {add(mul(H[i-1].fi, B[0],MOD[0]), s[i], MOD[0]), add(mul(H[i-1].sec,B[1], MOD[1]), s[i], MOD[1])}; } rev[n - 1] = {s[n - 1], s[n - 1]}; for (int i = n - 2; i >= 0; i--) { rev[i] = {add(mul(rev[i+1].fi, B[0],MOD[0]), s[i],MOD[0]), add(mul(rev[i+1].sec,B[1],MOD[1]), s[i],MOD[1])}; } if (H[n - 1] == rev[0]) { cout << 0 << endl; return 0; } FOR(i, 1, n) { if (get(i, n - i) == get_rev(n - 1, n - i)) { cout << i << endl; return 0; } } return 0; }