#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int dx[9]={0,-2,-1,1,2,2,1,-2,-1};
int dy[9]={0,1,2,2,1,-1,-2,-1,-2};
int xi[5001],yi[5001];
queue<int> q;
int book[5001][5011];
int maps[5001][5001];
int n,m,x,y;
int main(){
scanf("%d%d%d%d",&n,&m,&x,&y);
memset(maps,127,sizeof(maps));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
book[i][j]=-1;
q.push(1);
xi[q.size() ]=x;
yi[q.size() ]=y;
int a,b,k;
book[x][y]=0;
maps[x][y]=0;
int t=1;
while(q.size() >0){
k=q.front() ;
q.pop() ;
a=xi[k];
b=yi[k];
for(int i=1;i<=8;i++){
if(book[a+dx[i]][b+dy[i]]==-1&&a+dx[i]>0&&a+dx[i]<=n&&b+dy[i]>0&&b+dy[i]<=m){
t=t+1;
q.push(t);
xi[t]=a+dx[i];
yi[t]=b+dy[i];
book[a+dx[i]][b+dy[i]]=1;
maps[a+dx[i]][b+dy[i]] =maps[a][b]+1;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(maps[i][j]>1000001)maps[i][j]=-1;
printf("%d ",maps[i][j]);
}
printf("\n");
}
return 0;
}