#include<iostream>
#include<string.h>
#include<queue>
using namespace std;
struct no{
int x,y;
};
int n,m,x,y,vis[405][405];
int fx[8]={1,2,2,1,-1,-2,-2,-1};
int fy[8]={2,1,-1,-2,-2,-1,1,2};
void bfs(int x,int y){
queue <no> q;
q.push({x,y});
vis[x][y]=0;
while(!q.empty()){
no f=q.front();
q.pop();
for(int i=0;i<8;i++){
int xx=f.x+fx[i],yy=f.y+fy[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&vis[xx][yy]==-1){
vis[xx][yy]=vis[f.x][f.y]+1;
q.push({xx,yy});
}
}
}
}
int main(){
cin>>n>>m;
cin>>x>>y;
memset(vis,-1,sizeof(vis));
bfs(x,y);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<vis[i][j]<<" ";
}
cout<<endl;
}
return 0;
}