Program poj2488;//By_Thispoet
Const
ddx:Array[1..8]of Integer=(-2,-2,-1,-1,1,1,2,2);
ddy:Array[1..8]of Integer=(-1,1,-2,2,-2,2,-1,1);
maxn=26;
Type
rec=record
ch:Char;
num:Longint;
end;
Var
i,j,m,n,o,p,q :Longint;
v :Array[1..maxn,1..maxn]of Boolean;
stack :Array[1..maxn*maxn]of rec;
flag :Boolean;
Procedure Printf();
begin
for p:=1 to m*n do
write(stack[p].ch,stack[p].num);
writeln;
end;
Function Check(i,j:Longint):Boolean;
begin
if (i>n)or(i<=0)or(j>m)or(j<=0) then exit(false);
exit(true);
end;
Procedure Dfs(code,i,j:Longint);
var k,p,q :Longint;
begin
if code=m*n then
begin
Printf();
flag:=true;
exit;
end;
for k:=1 to 8 do
begin
p:=i+ddx[k];q:=j+ddy[k];
if check(p,q) and (not v[p,q]) then
begin
v[p,q]:=true;
inc(code);
stack[code].ch:=chr(p+64);
stack[code].num:=q;
Dfs(code,p,q);
dec(code);
if flag then exit;
v[p,q]:=false;
end;
end;
end;
BEGIN
readln(o);
for q:=1 to o do
begin
readln(m,n);
writeln('Scenario #',q,':');
flag:=false;
fillchar(v,sizeof(v),0);
for i:=1 to n do
begin
for j:=1 to m do
begin
stack[1].ch:=chr(i+64);
stack[1].num:=j;
v[i,j]:=true;
Dfs(1,i,j);
v[i,j]:=false;
if flag then break;
end;
if flag then break;
end;
if not flag then
writeln('impossible');
writeln;
end;
END.