/*挺好的一道DFS。
有几个trick。一个就是方向向量的顺序,不需要遍历每一个起始点,则需要按字母第一关键字,数字第二关键字进行向量方向的安排。
然后就是图的行列问题。
p行去列,实际上存图的时候是x<=q &&y<=p,这个细节要注意。*/
#include <stdio.h>
#include <cstring>
bool vis[30][30];
int ansx[1001];
int ansy[1001];
int p,q;
bool ret;
int dx[]= {-2,-2,-1,-1,1,1,2,2};
int dy[]= {-1,1,-2,2,-2,2,-1,1};
void dfs(int x,int y,int t)
{
int tempx,tempy;
ansx[t]=x;
ansy[t]=y;
if(t==p*q)
{
ret=true;
return ;
}
for(int i=0; i<8; i++)
{
tempx=x+dx[i];
tempy=y+dy[i];
if(tempx>=1&&tempx<=q&&tempy>=1&&tempy<=p&&!vis[tempx][tempy]&&!ret)
{
vis[tempx][tempy]=true;
dfs(tempx,tempy,t+1);
vis[tempx][tempy]=false;
}
}
}
int main()
{
int t,ca=1;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&p,&q);
printf("Scenario #%d:\n",ca++);
memset(vis,false,sizeof(vis));
memset(ansx,0,sizeof(ansx));
memset(ansy,0,sizeof(ansy));
ret=false;
vis[1][1]=true;
dfs(1,1,1);
if(!ret) printf("impossible\n");
else
{
for(int i=1; i<=p*q; i++)
printf("%c%d",char(ansx[i]+'A'-1),ansy[i]);
printf("\n");
}
printf("\n");
}
return 0;
}