#include<bits/stdc++.h>
#define int unsigned __int128
#define maxn 2000010
using namespace std;
namespace IO{
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline void write(int x){
if(x<0){putchar('-');x=-x;}
if(x>=10)write(x/10);
putchar(x%10+'0');return;
}
}
using namespace IO;
int n,tot,r,p,ans;
char a[500010],s[maxn];
int dp[maxn];
int maxr[maxn];
int h[maxn],pre[maxn],suf[maxn],mul[maxn];
int Pre[maxn],Suf[maxn],uid[maxn];
const int base=998244353;
inline int HASH(int l,int r){return pre[r]-(pre[l-1]*mul[r-l+1]);}
inline int HASHbk(int l,int r){return suf[l]-(suf[r+1]*mul[r-l+1]);}
signed main(){
n=read();mul[0]=1;
for(int i=1;i<=n;++i)cin>>a[i];
for(int i=1;i<=n;++i)pre[i]=pre[i-1]*base+a[i]-'a'+1;
for(int i=n;i>=1;--i)suf[i]=suf[i+1]*base+a[i]-'a'+1;
for(int i=1;i<=n+1;++i)mul[i]=mul[i-1]*base;
s[++tot]='@';s[0]=s[tot+1]='@';
for(int i=1;i<=n;++i)s[++tot]=a[i],uid[tot]=i,s[++tot]='@';
for(int i=1;i<=tot;++i){
if(i>r)while(s[i+dp[i]]==s[i-dp[i]])++dp[i];
else{
int j=p*2-i;
dp[i]=min(r-i,dp[j]);
while(s[i+dp[i]]==s[i-dp[i]])++dp[i];
}
if(i+dp[i]>r){
r=i+dp[i];
p=i;
}
}
for(int id=1;id<=tot;++id){
if(s[id]!='@')continue;
int l=id-dp[id]+2;l=uid[l];
int r=id+dp[id]-2;r=uid[r];
if(r<=l)continue;
if((r-l+1)%4!=0)continue;
if(HASH(l,(l+r)/2)==HASHbk((l+r)/2+1,r))ans=max(ans,r-l+1);
}
write(ans);
return 0;
}