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.