#include <cstdlib> #include <iostream> #include <cstring> using namespace std; class problem{ static int dx[8]; static int dy[8]; const static int MAX=50*50,R=26,C=26; bool v[R][C]; int cnt,r,c,rc; char pathr[MAX+1]; int pathc[MAX+1]; void DFS(int,int); bool inside(int x,int y){ return x>=0&&y>=0&&x<r&&y<c; } public: void set(int,int); void solve(); }; int problem::dx[8]={-2, -2, -1, -1, 1, 1, 2, 2}; int problem::dy[8]={-1, 1, -2, 2, -2, 2, -1, 1}; void problem::DFS(int x,int y){ cnt++;v[x][y]=true; pathr[cnt]='A'+x; pathc[cnt]=y+1; if(cnt==rc){ for(int i=1;i<=rc;++i) cout<<pathr[i]<<pathc[i]; cout<<endl; return; } for(int i=0;i<8;i++) if(cnt!=rc){ int tx=x+dx[i]; int ty=y+dy[i]; if(inside(tx,ty)&&!v[tx][ty]) DFS(tx,ty); } else break; if(cnt!=rc){ cnt--;v[x][y]=false; } } void problem::set(int p,int q){ r=p;c=q;rc=p*q; cnt=0; memset(v,0,sizeof v); } void problem::solve(){ DFS(0,0); if(cnt!=rc) cout<<"impossible"<<endl; } int main(int argc, char *argv[]){ problem knight_move; int T,p,q; cin>>T; for(int i=1;i<=T;++i){ cin>>p>>q; cout<<"Scenario #"<<i<<":"<<endl; knight_move.set(q,p); knight_move.solve(); if(i!=T)cout<<endl; } system("PAUSE"); return EXIT_SUCCESS; }