#include <bits/stdc++.h>
using namespace std;
int Board[16][16];
void ChessBoard(int dr, int dc, int tr, int tc, int size)
{//棋盘覆盖算法实现
if(size == 1)
return;
static int t = 0;
int tile = ++t;
int s = size/2;
//覆盖左上角棋盘
if(dr < tr +s && dc < tc +s)//特殊方格在棋盘中
ChessBoard(dr, dc, tr, tc, s);
else//特殊方格不在棋盘中
{
Board[tr+s-1][tc+s-1] = tile;
ChessBoard(tr+s-1, tc+s-1, tr, tc, s);
}
//覆盖右上角棋盘
if(dr < tr +s && dc >= tc +s)//特殊方格在棋盘中
ChessBoard(dr, dc, tr, tc+s, s);
else//特殊方格不在棋盘中
{
Board[tr+s-1][tc+s] = tile;
ChessBoard(tr+s-1, tc+s, tr, tc+s, s);
}
//覆盖左下角棋盘
if(dr >= tr +s && dc < tc +s)//特殊方格在棋盘中
ChessBoard(dr, dc, tr+s, tc, s);
else//特殊方格不在棋盘中
{
Board[tr+s][tc+s-1] = tile;
ChessBoard(tr+s, tc+s-1, tr+s, tc, s);
}
//覆盖右下角棋盘
if(dr >= tr +s && dc >= tc +s)//特殊方格在棋盘中
ChessBoard(dr, dc, tr+s, tc+s, s);
else//特殊方格不在棋盘中
{
Board[tr+s][tc+s] = tile;
ChessBoard(tr+s, tc+s, tr+s, tc+s, s);
}
}
int main()
{
//定义
int size = 16;
int dr,dc,tr,tc;
//输入特殊点
scanf("%d%d", &dr,&dc);
Board[dr][dc] = -1;
//处理
ChessBoard(dr, dc, 0, 0, size);
//输出
for(int i = 0;i<size;i++)
{
for(int j = 0;j<size;j++)
{
if(j != 0)
printf(" ");
printf("%2.d" , Board[i][j]);
}
printf("\n");
}
return 0;
}