#include<stdio.h>
#include<string.h>
int visit[5][5];
int a[5][5];//记录所存储的的第几步的数值,例如在a[2][2]是第三步,a[2][2]=3;
//应该是八个方向,自己可以画图看,相对于自己的位置横纵坐标相差多少
int X[8]= {2,-1,1,-2,2,1,-1,-2};
int Y[8]= {1,2,2,1,-1,-2,-2,-1};
int count;//路的方法计数器
int n; //走的步数计数器
void dfs(int x,int y)
{
if(n==25) //递归结束条件
{
for(int i=0; i<5; i++)
{
for(int j=0; j<5; j++)
printf("%d ",a[i][j]);
printf("\n");
}
count++;
return;
}
for(int k=0; k<8; k++)//八个方向依次遍历
{
if((x+X[k]>=0)&&(x+X[k]<5)&&(y+Y[k]>=0)&&(y+Y[k]<5)&&(visit[x+X[k]][y+Y[k]]==0))//检查是否符合规则
{
n++;//步数加1
a[x+X[k]][y+Y[k]]=n; //记录第几步的数值和路径
visit[x+X[k]][y+Y[k]]=1;// 标记已经走过
dfs(x+X[k],y+Y[k]);
visit[x+X[k]][y+Y[k]]=0; //恢复现场
n--;
}
}
}
int main()
{
int x,y;
while(~scanf("%d%d",&x,&y))
{
memset(visit,0,sizeof(visit));
count=0;
visit[x][y]=1;
n=1;
a[x][y]=n;
dfs(x,y);
printf("%d\n",count);
}
return 0;
}