#include <fstream>
#include <iostream>
using namespace std;
int a[513][513],nr=0;
void pavare(int l1,int c1, int l2, int c2, int x, int y){
if(l2-l1==1){
nr++;
int gol=a[x][y];
a[l1][c1]=a[l1][c2]=a[l2][c1]=a[l2][c2]=nr;
a[x][y]=gol;
}else{
int l=(l1+l2)/2,c=(c1+c2)/2;
if(x<=l&&y<=c){
nr++;
a[l+1][c]=a[l+1][c+1]=a[l][c+1]=nr;
pavare(l1,c1,l,c,x,y);
pavare(l+1,c1,l2,c,l+1,c);
pavare(l+1,c+1,l2,c2,l+1,c+1);
pavare(l1,c+1,l,c2,l,c+1);
}
if(x>l&&y<=c){
nr++;
a[l][c]=a[l+1][c+1]=a[l][c+1]=nr;
pavare(l1,c1,l,c,l,c);
pavare(l+1,c1,l2,c,x,y);
pavare(l+1,c+1,l2,c2,l+1,c+1);
pavare(l1,c+1,l,c2,l,c+1);
}
if(x>l&&y>c){
nr++;
a[l+1][c]=a[l][c]=a[l][c+1]=nr;
pavare(l1,c1,l,c,l,c);
pavare(l+1,c1,l2,c,l+1,c);
pavare(l+1,c+1,l2,c2,x,y);
pavare(l1,c+1,l,c2,l,c+1);
}
if(x<=l&&y>c){
nr++;
a[l+1][c]=a[l+1][c+1]=a[l][c]=nr;
pavare(l1,c1,l,c,l,c);
pavare(l+1,c1,l2,c,l+1,c);
pavare(l+1,c+1,l2,c2,l+1,c+1);
pavare(l1,c+1,l,c2,x,y);
}
}
}
ofstream g("pav.out");
int main()
{
freopen("pav.in","r",stdin);
int p,igol,jgol;
scanf("%d%d%d", &p,&igol,&jgol);
a[igol][jgol]=0;
int i,n=1;
for( i=1;i<=p;i++)
n*=2;
pavare(1,1,n,n,igol,jgol);
int j;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
g<<a[i][j]<<" ";
g<<'\n';
}
return 0;
}