#include <stdio.h>
#include <stdbool.h>
// 定义棋盘的大小
int visit[50][50]={0};
int p, q;
// 定义骑士的合法移动
int moves[8][2] = {
{-1, -2}, {1, -2}, {-2, -1}, {2, -1},{-2, 1},{2, 1},
{-1, 2}, {1, 2}
};
//深度递归遍历
int DFS(int x,int y,int num,char *a)
{
visit[x][y]=1;
a[num-1]='A'+y;
a[num]='1'+x;
a[num+1]='\0';
if(num==2*p*q-1||p*q==1)
{
return 1;
}
for(int i=0;i<8;i++)
{
if(x+moves[i][0]<p&&x+moves[i][0]>=0&&y+moves[i][1]>=0&&y+moves[i][1]<q&&visit[x+moves[i][0]][y+moves[i][1]]!=1)
{
if(DFS(x+moves[i][0],y+moves[i][1],num+2,a)==1)
{
return 1;
}
}
}
a[num-1]='\0';
a[num]='\0';
visit[x][y]=0;
return 0;
}
int main()
{
int n;
scanf("%d", &n);
for (int scenario = 1; scenario <= n; scenario++) {
char a[100];
scanf("%d %d", &p, &q);
printf("Scenario #%d:\n",scenario);
if(DFS(0,0,1,a)==1)
{
printf("%s\n\n",a);
}
else
{
printf("impossible\n\n");
}
for(int i=0;i<50;i++)
{
for(int j=0;j<50;j++)
{
visit[i][j]=0;
}
}
}
return 0;
}