#include<bits/stdc++.h>
using namespace std;
const int N = 405;
struct node{
int x,y,step;
}now;
int dir[8][2]={2,1,1,2,-2,-1,-1,-2,-2,1,1,-2,2,-1,-1,2};
int vis[N][N],n,m,x,y;
int bfs(int i,int j)noexcept(true){
queue<node>q;
q.push(node{x,y,0});
while(!q.empty()){
now=q.front(),q.pop();
if(now.x==i&&now.y==j)return 0;
for(int k=0;k<8;k++){
int dx=now.x+dir[k][0];
int dy=now.y+dir[k][1];
if(dx==i&&dy==j)return now.step+1;
if(vis[dx][dy])continue;
if(dx<1||dy<1||dx>n||dy>m)continue;
vis[dx][dy]=true;
q.push(node{dx,dy,now.step+1});
}
}
return -1;
}
int main(){
cin>>n>>m>>x>>y;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
memset(vis,0,sizeof(vis));
printf("%-5d",bfs(i,j));
}
putchar('\n');
}
return 0;
}