#include <bits/stdc++.h>
using namespace std;
struct node
{
int x,y,t;
};
int n,m,sx,sy,d[8][2]={{-1,2},{-2,1},{-2,-1},{-1,-2},{1,2},{2,1},{2,-1},{1,-2}};
bool vis[401][401];
int bfs(int fx,int fy)
{
int xx,yy,tt;
queue <node> q;
q.push({sx,sy,0});
while (!q.empty())
{
xx=q.front().x;
yy=q.front().y;
tt=q.front().t;
q.pop();
if (xx==fx&&yy==fy) return tt;
for (int i=0;i<8;i++)
{
if (xx+d[i][0]<=0||yy+d[i][1]<=0||xx+d[i][0]>n||yy+d[i][1]>m||vis[xx+d[i][0]][yy+d[i][1]])
continue;
q.push({xx+d[i][0],yy+d[i][1],tt+1});
vis[xx+d[i][0]][yy+d[i][1]]=true;
}
}
return -1;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&sx,&sy);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
memset(vis,0,sizeof(vis));
vis[sx][sy]=true;
printf("%d ",bfs(i,j));
}
printf("\n");
}
return 0;
}