#include <iostream>
#include<cstring>
using namespace std;
struct pos
{
int r,c;
};
int visited[30][30];
pos path[30];
pos dir[8]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
int p,q;
bool dfs(int r,int c,int step)
{
if(step==p*q)
return true; //全部遍历
if(r<0||r>=q||c<0||c>=p)
return false; //超边界退到下面那个for循环,在选择下一种方案
if(visited[r][c])return false;
visited[r][c]=1;
path[step].r=r; //记下每一步的路径
path[step].c=c;
for(int i=0;i<8;i++)
{
if(dfs(r+dir[i].r,c+dir[i].c,step+1))
return true; //是退出函数 因为如果if可以执行的话就已经遍历过了
}
visited[r][c]=false; //置为0下次可以从这走
return false;
}
int main()
{
int t;
cin>>t;
for(int ccase=1;ccase<=t;ccase++)
{
cout<<"Scenario #"<<ccase<<":"<<endl;
cin>>p>>q;
memset(visited,0,sizeof(visited));
int i;
for( i=0;i<q;i++)
{
for(int j=0;j<p;j++)
{
if(dfs(i,j,0))
{
i=q+10; //为了让i超过q,flag也行
for(int k=0;k<p*q;k++)
cout<<char(path[k].r+'A')<<(path[k].c+1);
break;
}
}
}
if(i==q)cout<<"Ipossible";
cout<<endl<<endl;
}
return 0;
}
#include<cstring>
using namespace std;
struct pos
{
int r,c;
};
int visited[30][30];
pos path[30];
pos dir[8]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
int p,q;
bool dfs(int r,int c,int step)
{
if(step==p*q)
return true; //全部遍历
if(r<0||r>=q||c<0||c>=p)
return false; //超边界退到下面那个for循环,在选择下一种方案
if(visited[r][c])return false;
visited[r][c]=1;
path[step].r=r; //记下每一步的路径
path[step].c=c;
for(int i=0;i<8;i++)
{
if(dfs(r+dir[i].r,c+dir[i].c,step+1))
return true; //是退出函数 因为如果if可以执行的话就已经遍历过了
}
visited[r][c]=false; //置为0下次可以从这走
return false;
}
int main()
{
int t;
cin>>t;
for(int ccase=1;ccase<=t;ccase++)
{
cout<<"Scenario #"<<ccase<<":"<<endl;
cin>>p>>q;
memset(visited,0,sizeof(visited));
int i;
for( i=0;i<q;i++)
{
for(int j=0;j<p;j++)
{
if(dfs(i,j,0))
{
i=q+10; //为了让i超过q,flag也行
for(int k=0;k<p*q;k++)
cout<<char(path[k].r+'A')<<(path[k].c+1);
break;
}
}
}
if(i==q)cout<<"Ipossible";
cout<<endl<<endl;
}
return 0;
}