1 #include<cstdio>
2 #include<cstring>
3 #define MAXN 26
4 using namespace std;
5
6 int dx[]={-1,1,-2,2,-2,2,-1,1};
7 int dy[]={-2,-2,-1,-1,1,1,2,2};
8 int vis[MAXN][MAXN];
9 int lu[MAXN][MAXN];
10 int p,q;
11 bool flag;
12
13 void dfs(int i,int j,int step)
14 {
15 int x,y;
16 vis[i][j]=step;
17 if(step==p*q)
18 {
19 flag=true;
20 return ;
21 }
22 for(int m=0; m<8; m++)
23 {
24 x=i+dx[m];
25 y=j+dy[m];
26 if((x>=0&&x<p&&y>=0&&y<q)&&!vis[x][y])
27 {
28 lu[step][0]=x;
29 lu[step][1]=y;
30 dfs(x,y,step+1);
31 if(flag)return;
32 vis[x][y]=0;
33 }
34 }
35 }
36 int main()
37 {
38 int t,tt=0;
39 scanf("%d",&t);
40 while(t--)
41 {
42 tt++;
43 scanf("%d%d",&p,&q);
44 printf("Scenario #%d:\n",tt);
45 for(int i=0; i<p; i++)
46 {
47 for(int j=0; j<q; j++)
48 {
49 int step=1;
50 flag=false;
51 memset(vis,0,sizeof(vis));
52 memset(lu,0,sizeof(lu));
53 lu[0][0]=i;
54 lu[0][1]=j;
55 dfs(i,j,step);
56 if(flag)
57 {
58 for(int k=0; k<p*q; k++)
59 printf("%c%d",lu[k][1]+'A',lu[k][0]+1);
60 printf("\n\n");
61 break;
62 }
63 }
64 if(flag) break;
65 }
66 if(!flag) printf("impossible\n\n");
67 }
68 return 0;
69 }
70
71