program xqz; const maxn=500005; var i,j,k,m,n,ll,rr:longint; st:ansistring; f,l,r,edge,next:array[0..maxn] of longint; begin readln(st); n:=length(st); f[1]:=n; ll:=0; rr:=0; for i:=2 to n do begin r[i]:=i+1; l[i]:=i-1; j:=f[i-ll+1]; if i+j-1>=rr then begin j:=rr-i+1; if j<0 then j:=0; while (i+j<=n)and(st[i+j]=st[j+1]) do inc(j); ll:=i; rr:=i+j-1; end; f[i]:=j; next[i]:=edge[j]; edge[j]:=i; end; k:=0; for i:=1 to n do begin j:=edge[i-1]; while j<>0 do begin if r[j]-l[j]>k then k:=r[j]-l[j]; r[l[j]]:=r[j]; l[r[j]]:=l[j]; j:=next[j]; end; if k<=i then break; end; writeln(i); end.