#include using namespace std; #define VI vector #define PII pair #define VPI vector #define mp make_pair #define eb emplace_back #define pb push_back #define st first #define nd second #define endl '\n' #define debug(x) cerr << #x << " " << x << endl; #define ll long long //#define int ll const int N = 2e6 + 7; char tbl[N]; int r[N]; void Manacher(const char* s, int n, int* r) { for (int i = 0, m = 0, k = 0, p = 0; i < 2 * n - 1; m = i++ - 1) { while (p < k and i / 2 + r[m] != k) r[i++] = min(r[m--], (k + 1 - p++) / 2); while (k + 1 < n and p > 0 and s[k + 1] == s[p - 1]) k++, p--; r[i] = (k + 1 - p++) / 2; } } bool is_pal(int p, int k) { return r[p + k] >= (k - p + 1) / 2; } void solve(){ int n; cin >> n; for (int i = 0; i < n; i++) { cin >> tbl[i]; } Manacher(tbl, n, r); for (int i = n; i > 0; i--) { if (is_pal(n - i, n - 1)) { cout << n - i << "\n"; return; } } cout << n - 1 << "\n"; return; } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int test = 1; while(test--){ solve(); } return 0; }