1 type
2 point=^node;
3 node=record
4 st:ansistring;
5 ex:longint;
6 jump,fat:point;
7 next:array[‘A‘..‘Z‘] of point;
8 end;
9 var
10 i,j,k,l,m,n:longint;
11 head,p1,p2:point;
12 s1:ansistring;
13 a:array[0..2000000] of longint;
14 function getpoint:point;
15 var p1:point;c1:char;
16 begin
17 new(p1);
18 p1^.ex:=0;
19 p1^.st:=‘‘;
20 p1^.fat:=nil;
21 p1^.jump:=head;
22 for c1:=‘A‘ to ‘Z‘ do p1^.next[c1]:=nil;
23 getpoint:=p1;
24 end;
25 procedure ins(s1:ansistring);
26 var
27 s2:ansistring;
28 i,j,k,l:longint;
29 p1,p2:point;
30 begin
31 p1:=head;s2:=‘‘;
32 for i:=1 to length(s1) do
33 begin
34 s2:=s2+s1[i];
35 if p1^.next[s1[i]]=nil then
36 begin
37 p2:=getpoint;
38 p2^.st:=s2;
39 p2^.fat:=p1;
40 p1^.next[s1[i]]:=p2;;
41 end;
42 p1:=p1^.next[s1[i]];
43 if i=length(s1) then p1^.ex:=1;
44 end;
45 end;
46 procedure linkit;
47 var
48 i,j,k,l,f,r:longint;
49 p1,p2:point; c1:char;
50 d:array[0..10000] of point;
51 begin
52 f:=1;r:=2;
53 d[1]:=head;
54 while f<r do
55 begin
56 for c1:=‘A‘ to ‘Z‘ do
57 begin
58 if d[f]^.next[c1]<>nil then
59 begin
60 d[r]:=d[f]^.next[c1];
61 if (d[f]<>head) then
62 begin
63 p2:=d[f]^.jump;
64 while (p2^.next[c1]=nil) and (p2<>head) do p2:=p2^.jump;
65 if p2^.next[c1]<>nil then d[r]^.jump:=p2^.next[c1];
66 end;
67 inc(r);
68 end;
69 end;
70 inc(f);
71 end;
72 end;
73 function cal(s1:ansistring):longint;
74 var
75 i,j,k,l:longint;
76 p1,p2:point;
77 begin
78 p1:=head;l:=0;
79 fillchar(a,sizeof(a),0);
80 a[0]:=1;
81 for i:=1 to length(s1) do
82 begin
83 if p1^.next[s1[i]]=nil then
84 begin
85 while (p1^.next[s1[i]]=nil) and (p1<>head) do p1:=p1^.jump;
86 if p1^.next[s1[i]]<>nil then p1:=p1^.next[s1[i]]
87 end
88 else p1:=p1^.next[s1[i]];
89 p2:=p1;
90 while p2<>head do
91 begin
92 if (p2^.ex=1) and (a[i-length(p2^.st)]=1) then
93 begin
94 a[i]:=1;
95 l:=i;break;
96 end;
97 p2:=p2^.jump;
98 end;
99 end;
100 exit(l);
101 end;
102
103 begin
104 readln(n,m);head:=getpoint;
105 head^.jump:=head;
106 for i:=1 to n do
107 begin
108 readln(s1);
109 ins(upcase(s1));
110 end;
111 linkit;
112 for i:=1 to m do
113 begin
114 readln(s1);
115 writeln(cal(upcase(s1)));
116 end;
117 readln;
118 end.
119