#include using namespace std; #define FOR(i, a, b) for (int i = (int)(a); i < (int)(b); ++i) #define REP(i, n) FOR(i, 0, n) #define TRACE(x) cerr << #x << " = " << x << endl #define _ << " _ " << #define pb push_back #define x first #define y second typedef long long ll; typedef long double lf; const int BASE1 = 31337; const int BASE2 = 10007; const int MOD1 = 1000000007; const int MOD2 = 1000000009; const int MAXN = 500500; inline int add(int a, int b, int mod) { return a + b >= mod ? a + b - mod : a + b; } inline int sub(int a, int b, int mod) { return a - b < 0 ? a - b + mod : a - b; } inline int mul(int a, int b, int mod) { return (ll)a * b % mod; } int n; char s[MAXN]; int main(void) { scanf("%d", &n); scanf("%s", s); int h1l = 0; int h2l = 0; int h1r = 0; int h2r = 0; int p1 = 1; int p2 = 1; int ans = n - 1; for (int i = n - 1; i >= 0; --i) { h1l = add(h1l, mul(p1, s[i], MOD1), MOD1); h2l = add(h2l, mul(p2, s[i], MOD2), MOD2); h1r = add(s[i], mul(h1r, BASE1, MOD1), MOD1); h2r = add(s[i], mul(h2r, BASE2, MOD2), MOD2); p1 = mul(p1, BASE1, MOD1); p2 = mul(p2, BASE2, MOD2); if (h1l == h1r && h2l == h2r) { ans = min(ans, i); } } printf("%d\n", ans); return 0; }