{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,R+,S+,V+,X-} {$M 16384,0,655360} Var f:text; l:array['A'..'Z'] of string[25]; mrk:array['A'..'Z',1..25,1..2] of boolean; lt:array['A'..'Z'] of boolean; mu:string; c,no,i:char; tk,tv,mk,mv:char; nels:boolean; Procedure Szimul; var x:integer; begin If lt[mv] Then begin c:=mv; mv:=mk; mk:=c; end; If tv=mv Then WriteLn('The Minotaur is slain in ',tv) Else begin {Th‚zeusz} x:=Pos(tv,mu); If x=0 Then begin x:=Pos(tk,l[tv]); Repeat x:=(x mod Length(l[tv]))+1; Until not mrk[tv,x,1]; end Else begin lt[tv]:=true; x:=Pos(mu[x-1],l[tv]); end; mrk[tv,x,1]:=true; tk:=tv; tv:=l[tv][x]; {Minotaurusz} x:=Pos(mk,l[mv]); Repeat Dec(x); If x=0 Then x:=Length(l[mv]); Until not mrk[mv,x,2]; mrk[mv,x,2]:=true; mk:=mv; mv:=l[mv][x]; If (Length(mu)<255) Then mu:=mk+mu Else mu:=mk+Copy(mu,1,254); {Tal lkoznak-e folyos˘n?} If (mv=tk) and (tv=mk) Then WriteLn('Theseus is killed between ',tk,' and ',tv) Else Szimul; end; end; BEGIN Assign(f,'theseus.in'); Reset(f); Repeat For i:='A' To 'Z' Do l[i]:=''; FillChar(mrk,SizeOf(mrk),false); FillChar(lt,SizeOf(lt),false); mu:=''; Read(f,c); If c<>'#' Then begin nels:=false; Repeat If nels Then Read(f,c); If c<>'@' Then begin Read(f,no); ReadLn(f,l[c]); end; nels:=true; Until c='@'; Read(f,tk); Read(f,tv); Read(f,mk); ReadLn(f,mv); Szimul; end; Until c='#' Close(f); END.