#include <bits/stdc++.h>
using namespace std;
const int N=1e3+10;
char a[N][N];
int n,qx,qy,zx,zy,v[N][N],m;
int dx[]={-1,-2,-2,-1,1,1,2,2};
int dy[]={-2,-1,1,2,2,-2,-1,1};
struct node{
int x,y;//dist到起点的最短距离
};
int dist[N][N];
void BFS(){
queue<node> q;
q.push({qx,qy});//
v[qx][qy]=1;
dist[qx][qy]=0;
while(q.size()){//还有点可以扩散
//取出队首 惊醒扩散
node p=q.front();
q.pop();
for(int i=0;i<=7;i++){
int xx=p.x+dx[i];
int yy=p.y+dy[i];
if(xx>=1&&xx<=n &&yy>=1&&yy<=m &&v[xx][yy]==0){
q.push({xx,yy});
dist[xx][yy]=dist[p.x][p.y]+1;
v[xx][yy]=1;
}
}
}
}
int main(){
cin>>n>>m;
cin>>qx>>qy;
memset(dist,-1,sizeof dist);
BFS();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<left<<setw(5)<<dist[i][j];
}
cout<<endl;
}
return 0;
}
