#include <cstdio>
#include <queue>
using namespace std;
int n,m,a,b,dis[505][505],vis[505][505];
int dx[10]={1,1,-1,-1,2,2,-2,-2};
int dy[10]={2,-2,2,-2,1,-1,1,-1};
struct node{
int x,y;
};
queue<node>q;
int main(){
cin>>n>>m>>a>>b;
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
dis[i][j]=-1;
}
}
q.push(node{a,b});
vis[a][b]=1;
dis[a][b]=0;
while(!q.empty()){
node t=q.front();
q.pop();
for (int i=0;i<8;i++){
int x=t.x+dx[i];
int y=t.y+dy[i];
node tt=node{x,y};
if (x>=0 && y>=0 && x<=n && y<=m && !vis[x][y]){
vis[x][y]=1;
q.push(tt);
dis[tt.x][tt.y]=dis[t.x][t.y]+1;
}
}
}
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
printf("%-5d",dis[i][j]);
}
cout<<endl;
}
return 0;
}