Cod sursa(job #759270)
Program prefix;
var s:ansistring;
urm:array [1..1000001] of longint;
i,m,t,max,j:longint;
fi,fo:text;
procedure urmatorul;
var k,q:integer;
begin
urm[1]:=0; k:=0; max:=0;
for q:=2 to m do begin
while (k>0) and (s[q]<>s[k+1]) do k:=urm[k];
if s[k+1]=s[q] then inc(k);
urm[q]:=k;
end;
end;
begin
assign(fi,'prefix.in');
assign(fo,'prefix.out');
reset(fi); rewrite(fo); readln(fi,t);
for i:=1 to t do begin
readln(fi,s); m:=length(s);
urmatorul;
for j:=m downto 1 do
if (urm[j]>0) and (j mod (j-urm[j])=0) then begin max:=j; break; end;
writeln(fo,max);
end;
close(fo);
end.