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;