#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int gotox[8]={2,-2,2,-2,1,1,-1,-1},gotoy[8]={1,1,-1,-1,2,-2,-2,2};
int n,m,x,y,a[401][401],visited[401][401];
struct node
{
int x,y,step;
int cj(int xxx,int yyy,int sss)
{
x=xxx;y=yyy;step=sss;
}
};
void bfs(int fx,int fy)
{
queue<node>q;
node abc={x,y,0};
q.push(abc);
memset(visited,0,sizeof(visited));
while(!q.empty())
{
abc=q.front();
int xx=abc.x,yy=abc.y,ss=abc.step;
if(xx==fx&&yy==fy)
{
a[fx][fy]=ss;
return;
}
for(int i=0;i<8;i++)
{
int nextx=xx+gotox[i],nexty=yy+gotoy[i];
if(nextx<=n&&nextx>=1&&nexty<=m&&nexty>=1&&!visited[nextx][nexty])
{
visited[nextx][nexty]=true;
abc.cj(nextx,nexty,ss+1);
q.push(abc);
}
}
q.pop();
}
a[fx][fy]=-1;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&x,&y);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
bfs(i,j);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
printf("%-5d",a[i][j]);
printf("%c",'\n');
}
return 0;
}