这是程序
const
maxn=799999;
var
n:longint;
c:array[0..maxn]of longint;
h,d:array[0..maxn]of string;
a,b:array[0..50]of string;
s1,s2:string;
procedure init;
var
i:longint;
begin
readln(s1);
i:=pos(' ',s1);
s2:=copy(s1,i+1,length(s1)-i);
delete(s1,i,length(s1)-i+1);
while not eof do
begin
inc(n);
readln(a[n]);
i:=pos(' ',a[n]);
b[n]:=copy(a[n],i+1,length(a[n])-i);
delete(a[n],i,length(a[n])-i+1);
end;
end;
function hash(s:string):boolean;
var
i,j,x:longint;
begin
x:=0;
for i:=1 to length(s) do
x:=x+(ord(s[i])-i)*i;
x:=x mod maxn;
while (h[x]<>'')and(h[x]<>s) do
x:=x mod maxn+1;
if h[x]='' then begin
h[x]:=s;
exit(true);
end
else exit(false);
end;
procedure bfs;
var
pp:boolean;
ss,s:string;
head,tail,i,j:longint;
begin
head:=0;
tail:=1;
d[1]:=s1;
pp:=hash(s1);
repeat
head:=head mod maxn+1;
for i:=1 to n do
begin
j:=pos(a[i],d[head]);
if j>0 then begin
ss:=copy(d[head],1,j-1);
ss:=ss+b[i];
s:=copy(d[head],j+length(a[i]),length(d[head])-j-length(a[i])+1);
ss:=ss+s;
if hash(ss) then begin
tail:=tail mod maxn+1;
d[tail]:=ss;
c[tail]:=c[head]+1;
if d[tail]=s2 then begin
writeln(c[tail]);
halt;
end;
end;
end;
end;
until (head>=tail)or(c[tail]>=10);
writeln('NO ANSWER!');
end;
begin
init;
bfs;
end.