#include<stdio.h> bool a[30][30];//标志 char way[678][2];//路径 int k; int p,q; bool f(int x,int y); void init(); int main() { int n; scanf("%d",&n); int i=1; while(i<=n) { scanf("%d%d",&p,&q); init(); k=0; f(2,2); printf("Scenario #%d:/n",i); if(k!=p*q)printf("impossible"); else { int j; for(j=1;j<=k;j++) printf("%c%d",way[j][0],way[j][1]); } if(i!=n)printf("/n/n");; i++; } return 0; } bool f(int x,int y) { if(a[x][y])return true;//搜索过与否 k++; way[k][0]=x+63;//插入路径 way[k][1]=y-1; a[x][y]=true; if(k==p*q)return false; int i; f(x-2,y-1);if(k==p*q)return false;//递归 f(x-2,y+1);if(k==p*q)return false; f(x-1,y-2);if(k==p*q)return false; f(x-1,y+2);if(k==p*q)return false; f(x+1,y-2);if(k==p*q)return false; f(x+1,y+2);if(k==p*q)return false; f(x+2,y-1);if(k==p*q)return false; f(x+2,y+1);if(k==p*q)return false; k--;a[x][y]=false;return true;//回溯到原来位置 } void init() { int i,j; for(i=0;i<=1;i++) for(j=0;j<p+4;j++)a[i][j]=true;//边缘处理 for(i=0;i<=1;i++) for(j=0;j<q+4;j++)a[j][i]=true; for(i=q+3;i>=q+2;i--) for(j=0;j<p+4;j++)a[i][j]=true; for(i=p+3;i>=p+2;i--) for(j=0;j<q+4;j++)a[j][i]=true; for(i=2;i<q+2;i++) for(j=2;j<p+2;j++) a[i][j]=false; }