{$H+}
uses math;
const
fi='';//paliny.inp';
fo='';//paliny.out';
maxn=50003;
pp=307;
base=trunc(1e9)+7;
var
i,j,n,d,c,g,top,ans : longint;
ha,hb,pow : array[0..maxn] of int64;
a : array[1..maxn] of longint;
s : string;
function gethash1(l,r : longint) : int64;
begin
gethash1 := (ha[r] - ha[l-1] * pow[r-l+1] + base * base) mod base;
end;
function gethash2(l,r : longint) : int64;
begin
gethash2 := (hb[r] - hb[l+1] * pow[l-r+1] + base * base) mod base;
end;
function ok ( le : longint) : boolean;
var i,j : longint;
begin
for i := 1 to n - le + 1 do
if gethash1(i,i+le-1) = gethash2(i+le-1,i) then exit(true);
exit(false);
end;
procedure process;
begin
d := 1 ;
c := top ;
g := (d+c) div 2;
while (G<>d) and (g<>C) do
begin
if ok (a[g]) then d := g else c := g;
g := (d+c) div 2;
end;
for g := c downto d do
if ok (a[g]) then
begin
ans := max(ans,a[g]);
exit;
end;
end;
procedure push(x : longint);
begin
inc(top);
a[top] := x;
end;
begin
assign(input,fi);reset(input);
assign(output,fo);rewrite(output);
readln(n);
readln(s);
pow[0] := 1;
for i := 1 to n do pow[i] := pow[i-1] * pp mod base;
for i := 1 to n do ha[i] := ( ha[i-1] * pp + ord(s[i]) ) mod base;
for i := n downto 1 do hb[i] := ( hb[i+1] * pp + ord(s[i]) ) mod base;
top := 0;
for i := 1 to n do
if i mod 2 = 0 then push(i);
process;
top := 0;
for i := 1 to n do
if i mod 2 = 1 then push(i);
process;
writeln(ans);
close(input);close(output);
end.
eyRIK30KdXNlcyBtYXRoOwpjb25zdAogIGZpPScnOy8vcGFsaW55LmlucCc7CiAgZm89Jyc7Ly9wYWxpbnkub3V0JzsKICBtYXhuPTUwMDAzOwogIHBwPTMwNzsKICBiYXNlPXRydW5jKDFlOSkrNzsKdmFyCiAgaSxqLG4sZCxjLGcsdG9wLGFucyA6IGxvbmdpbnQ7CiAgaGEsaGIscG93IDogYXJyYXlbMC4ubWF4bl0gb2YgaW50NjQ7CiAgYSA6IGFycmF5WzEuLm1heG5dIG9mIGxvbmdpbnQ7CiAgcyA6IHN0cmluZzsKZnVuY3Rpb24gZ2V0aGFzaDEobCxyIDogbG9uZ2ludCkgOiBpbnQ2NDsKICBiZWdpbgogICAgZ2V0aGFzaDEgOj0gKGhhW3JdIC0gaGFbbC0xXSAqIHBvd1tyLWwrMV0gKyBiYXNlICogYmFzZSkgbW9kIGJhc2U7CiAgZW5kOwpmdW5jdGlvbiBnZXRoYXNoMihsLHIgOiBsb25naW50KSA6IGludDY0OwogIGJlZ2luCiAgICBnZXRoYXNoMiA6PSAoaGJbcl0gLSBoYltsKzFdICogcG93W2wtcisxXSArIGJhc2UgKiBiYXNlKSBtb2QgYmFzZTsKICBlbmQ7CmZ1bmN0aW9uIG9rICggbGUgOiBsb25naW50KSA6IGJvb2xlYW47CiAgdmFyIGksaiA6IGxvbmdpbnQ7CiAgYmVnaW4KICAgIGZvciBpIDo9IDEgdG8gbiAtIGxlICsgMSBkbwogICAgICBpZiBnZXRoYXNoMShpLGkrbGUtMSkgPSBnZXRoYXNoMihpK2xlLTEsaSkgdGhlbiBleGl0KHRydWUpOwogICAgZXhpdChmYWxzZSk7CiAgZW5kOwpwcm9jZWR1cmUgcHJvY2VzczsKICBiZWdpbgogIGQgOj0gMSA7CiAgYyA6PSB0b3AgOwogIGcgOj0gKGQrYykgZGl2IDI7CiAgd2hpbGUgKEc8PmQpIGFuZCAoZzw+QykgZG8KICAgIGJlZ2luCiAgICAgIGlmIG9rIChhW2ddKSB0aGVuIGQgOj0gZyBlbHNlIGMgOj0gZzsKICAgICAgZyA6PSAoZCtjKSBkaXYgMjsKICAgIGVuZDsKICBmb3IgZyA6PSBjIGRvd250byBkIGRvCiAgICBpZiBvayAoYVtnXSkgdGhlbgogICAgICBiZWdpbgogICAgICAgIGFucyA6PSBtYXgoYW5zLGFbZ10pOwogICAgICAgIGV4aXQ7CiAgICAgIGVuZDsKICBlbmQ7CnByb2NlZHVyZSBwdXNoKHggOiBsb25naW50KTsKICBiZWdpbgogICAgaW5jKHRvcCk7CiAgICBhW3RvcF0gOj0geDsKICBlbmQ7CmJlZ2luCiAgYXNzaWduKGlucHV0LGZpKTtyZXNldChpbnB1dCk7CiAgYXNzaWduKG91dHB1dCxmbyk7cmV3cml0ZShvdXRwdXQpOwogIHJlYWRsbihuKTsKICByZWFkbG4ocyk7CiAgcG93WzBdIDo9IDE7CiAgZm9yIGkgOj0gMSB0byBuIGRvIHBvd1tpXSA6PSBwb3dbaS0xXSAqIHBwIG1vZCBiYXNlOwogIGZvciBpIDo9IDEgdG8gbiBkbyBoYVtpXSA6PSAoIGhhW2ktMV0gKiBwcCArIG9yZChzW2ldKSApIG1vZCBiYXNlOwogIGZvciBpIDo9IG4gZG93bnRvIDEgZG8gaGJbaV0gOj0gKCBoYltpKzFdICogcHAgKyBvcmQoc1tpXSkgKSBtb2QgYmFzZTsKICB0b3AgOj0gMDsKICBmb3IgaSA6PSAxIHRvIG4gZG8KICAgIGlmIGkgbW9kIDIgPSAwIHRoZW4gcHVzaChpKTsKICBwcm9jZXNzOwogIHRvcCA6PSAwOwogIGZvciBpIDo9IDEgdG8gbiBkbwogICAgaWYgaSBtb2QgMiA9IDEgdGhlbiBwdXNoKGkpOwogIHByb2Nlc3M7CiAgd3JpdGVsbihhbnMpOwogIGNsb3NlKGlucHV0KTtjbG9zZShvdXRwdXQpOwplbmQuCgo=