#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
struct node {
int x,y;
};
int dir[8][2] = {{-2,1},{-2-1},{-1,2},{-1,-2},{1,2},{1,-2},{2,-1},{2,1}};
int ans[410][410];
int n,m;
void bfs(int x,int y){
queue<node> q;
node tmp = {x,y};
q.push(tmp);
ans[x][y] = 0;
while(q.size()){
tmp = q.front();
q.pop();
for(int i=0;i<8;i++){
int nx = tmp.x+dir[i][0];
int ny = tmp.y+dir[i][1];
if(nx<1||nx>n||ny<1||ny>m||ans[nx][ny]!=-1)
continue;
ans[nx][ny] = ans[tmp.x][tmp.y]+1;
q.push({nx,ny});
}
}
}
int main(){
int sx,sy;
cin>>n>>m>>sx>>sy;
memset(ans,-1,sizeof(ans));
bfs(sx,sy);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
printf("%-5d",ans[i][j]);
cout<<endl;
}
system("pause");
return 0;
}