1536. seek (Standard IO)
Time Limits: 1000 ms Memory Limits: 65536 KB Detailed Limits
Goto ProblemSet
Description俗话说“好命不如好名”,小h准备给他的宠物狗起个新的名字,于是他把一些英文的名字全抄下来了,写成一行长长的字符串,小h觉得一个名字如果是好名字,那么这个名字在这个串中既是前缀,又是后缀,即是这个名字从前面开始可以匹配,从后面开始也可以匹配,例如abc在 abcddabc中既是前缀,也是后缀,而ab就不是,可是长达4*10^5的字符让小h几乎昏过去了,为了给自己的小狗起个好名字,小h向你求救,并且他要求要将所有的好名字的长度都输出来。
Input一行,要处理的字符串(都是小写字母)。
Output一行若干个数字,从小到大输出,表示好名字的长度。
Data Constraintvar
a,b,c,ans:longint;
s:ansistring;
v,r:array[0..400000]of longint;
begin
//assign(input,'1.in');reset(input);
readln(s);
inc(ans);
r[ans]:=length(s);
for a:=2 to length(s)-1 do
begin
while (b>0)and(s[b+1]<>s[a]) do
b:=v[b];
if s[b+1]=s[a] then
begin
v[a]:=b+1;
inc(b);
end;
b:=v[a];
end;
v[0]:=-1;
while b>-1 do
begin
if s[b+1]=s[length(s)] then
begin
inc(ans);
r[ans]:=b+1;
end;
b:=v[b];
end;
for a:=ans downto 1 do
begin
write(r[a]);
if a<>1 then write(' ');
end;
close(input);
end.