Listing: RETEA.PAS
{$M 16384,0,655360}
type SG = record
l,d:Integer;
lc,dc:Char; s:Byte
end;
const max = 4010;
var a:array[0..max] of SG;
ntest,n,testfor:Integer;
b:array[0..max,1..2] of Byte;
procedure tata(sw:Integer; loc:Char;
var ttata:Integer; var leg:Char);
begin
if a[sw].S=0
then if loc='R' then leg:='L' else leg:='D'
else if loc='R' then leg:='D'
else leg:='L';
if leg='L' then ttata:=a[sw].L
else ttata:=a[sw].D;
if ttata=-1 then Exit;
if leg='L' then leg:=a[sw].lc
else leg:=a[sw].dc
end;
procedure doit(sw:Integer; loc:Char);
var t:Integer; w:Char;
begin
repeat
tata(sw,loc,t,w);
if t<>-1 then begin loc:=w; sw:=t end;
until t=-1;
if a[sw].S=0
then if loc='R' then loc:='L'
else loc:='D'
else if loc='R' then loc:='D'
else loc:='L';
if loc='L' then Write(b[sw,1],' ')
else Write(b[sw,2],' ')
end;
procedure init;
var i,nconex,sw1,sw2,ns1,nteste:Integer;
c1,c2:Char;
begin
for i:=0 to max do
begin
a[i].L:=-1; a[i].D:=-1; a[i].s:=0
end;
Fillchar(b,Sizeof(b),0);
Readln(n,nconex);
for i:=1 to nconex do
begin
Read(sw1);
repeat Read(c1) until c1<>' ';
Read(sw2);
repeat Read(c2) until c2<>' ';
if c2='L'
then
begin
a[sw2].L:=sw1;
a[sw2].Lc:=c1
end
else
begin
a[sw2].D:=sw1;
a[sw2].Dc:=c1
end;
Readln;
end;
for i:=0 to n-1 do Read(a[i].S);
Readln;
Readln(ns1);
for i:=1 to ns1 do
begin
Read(sw1);
repeat Read(c1) until c1<>' ';
if c1='L'
then b[sw1,1]:=1
else b[sw1,2]:=1;
Readln
end;
Readln(nteste);
for i:=1 to nteste do
begin
Read(sw1);
repeat Read(c1) until c1<>' ';
doit(sw1,c1);
Readln
end;
Writeln; Readln
end;
Begin
Assign(input,'F.DAT'); Reset(input);
Readln(ntest);
for testfor:=1 to ntest do init;
Close(input)
End.