Listing CANISTRE.PAS 
Program Canistre; 
Var nr1,nr2,nr3,a,b,c,n,k:Longint; 
cont,lb:Longint; 
f:Text; 
gasit:Boolean; 
Function Cmmdc(a,b:Longint):Longint; 
begin 
if a*b=0 
then if a<>0 then Cmmdc:=a 
else Cmmdc:=b 
else if a>b 
then Cmmdc:=Cmmdc(b,a-(a div b)*b) 
else Cmmdc:=Cmmdc(a,b-(b div a)*a) 
end; 
Begin 
Assign(f,'CANA.IN'); Reset(f); 
Readln(f,n); Readln(f,a,b); 
Close(f); 
nr1:=0; nr2:=0; 
Assign(f,'CANA.OUT'); 
if n=0 
then 
begin Rewrite(f); Close(f); Exit end; 
if n=b 
then 
begin 
Rewrite(f); 
Writeln(f,'UB'); 
Close(f); 
Exit 
end; 
if (Cmmdc(a,b)<>1) and (n mod Cmmdc(a,b)<>0) 
then 
begin 
Rewrite(f); 
Writeln(f,'NU'); 
Close(f); 
Exit 
end; 
c:=0; 
while c<>n do 
begin 
nr1:=nr1+2; 
if c+a>b then nr1:=nr1+2; 
c:=(c+a) mod b; 
if c=0 then c:=b 
end; 
c:=0; 
gasit:=false; 
while (nr2<nr1) and not gasit do 
begin 
nr2:=nr2+1; 
nr2:=nr2+2*((b+c) div a); 
nr2:=nr2+1; 
c:=(c+b) mod a; 
lb:=b+c; 
nr3:=0; 
while lb>n do 
begin 
lb:=lb-a; 
nr3:=nr3+1 
end; 
if lb=n 
then 
begin 
gasit:=true; 
nr2:=nr2+1+2*(nr3-1)+1 
end 
end; 
if nr2<nr1 
then 
begin 
Rewrite(f); 
c:=0; cont:=nr2; 
gasit:=false; 
while not gasit do 
begin 
Writeln(f,'UB'); 
for k:=1 to (b+c) div a do 
begin 
Writeln(f,'BA'); Writeln(f,'GA') 
end; 
Writeln(f,'BA'); 
c:=(c+b) mod a; 
lb:=b+c; nr3:=0; 
while lb>n do 
begin 
lb:=lb-a; nr3:=nr3+1 
end; 
if lb=n 
then 
begin 
gasit:=true; 
Writeln(f,'UB'); 
for k:=1 to nr3-1 do 
begin 
Writeln(f,'BA'); Writeln(f,'GA') 
end; 
Writeln(f,'BA') 
end 
end; 
Close(f) 
end 
else 
begin 
cont:=nr1; 
Rewrite(f); 
c:=0; 
while c<>n do 
begin 
Writeln(f,'UA'); 
Writeln(f,'AB'); 
if c+a>b 
then 
begin 
Writeln(f,'GB'); 
Writeln(f,'AB') 
end; 
c:=(c+a) mod b; 
if c=0 then c:=b 
end; 
Close(f) 
end 
End.