#include<iostream>
#include<queue>
#include<string.h>
#include<stdio.h>
using namespace std;
int vis[101][101],n,m,sx,sy;
int dx[8]={1,1,-1,-1,2,2,-2,-2};
int dy[8]={2,-2,2,-2,1,-1,1,-1};
struct node{
int x,y;
};
void bfs(){
queue<node>que;
que.push({sx,sy});
vis[sx][sy]=0;
while(!que.empty()){
node n1=que.front();
que.pop();
for(int i=0;i<8;i++){//遍历八个方向
int xx=n1.x+dx[i];
int yy=n1.y+dy[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&vis[xx][yy]==-1){
que.push({xx,yy});
vis[xx][yy]=vis[n1.x][n1.y]+1;
}
}
}
}
int main(){
cin>>n>>m>>sx>>sy;
memset(vis,-1,sizeof(vis));
bfs();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%-2d ",vis[i][j]);
}
cout<<endl;
}
return 0;
}