procedure insert;
var now,i:longint;
dd:char;
begin
now:=1;len:=length(s);
for i:=1 to len do
begin
dd:=s[i];
if t[now].son[dd]=0 then
begin
inc(tt);t[now].son[dd]:=tt;
end;
now:=t[now].son[dd];
end;
end;
procedure build;
var h,tail,i,v:longint;j:char;
begin
for j:='a' to 'z' do t[0].son[j]:=1;
t[0].fai:=1;h:=0;tail:=1;
q[1]:=1;
while h<>tail do
begin
inc(h);i:=q[h];
for j:='a' to 'z' do
begin
v:=t[i].son[j];
if v=0 then
begin
t[i].son[j]:=t[t[i].fai].son[j];continue;
end;
t[v].fai:=t[t[i].fai].son[j];
inc(tail);q[tail]:=v;
end;
end;
end;