package 块;
import java.util.Scanner;
public class 马的遍历2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input =new Scanner(System.in);
int i,j,k;
int []dicoi= { -2,-2,+2,+2,-1,+1,-1,+1};
int []dicoj= { -1,+1,-1,+1,-2,-2,+2,+2};
int N=input.nextInt();
int M=input.nextInt();
int [][]NM=new int [N][M];
int a=input.nextInt();
int b=input.nextInt();
int [][]Coordinate=new int [1][2];
Coordinate[0][0]=a-1;
Coordinate[0][1]=b-1;
k=0;
int [][]Passparameters= coordinate(NM,dicoi,dicoj,Coordinate,a,b);
// 两次循环 一次有效 一次无效
while(Passparameters[0][0]>-1) {
Passparameters=coordinate(NM,dicoi,dicoj,Passparameters,a,b);
}
for(i=0;i<NM.length;i++) {
for(j=0;j<NM[i].length;j++) {
if(NM[i][j]==0)
NM[i][j]=-1;
}
}
NM[a-1][b-1]=0;
for(i=0;i<NM.length;i++) {
for(j=0;j<NM[i].length;j++) {
System.out.print(NM[i][j]+" ");
}
System.out.print("\n");
}
}
public static int [][]coordinate(int [][]NM,int []dicoi,int []dicoj,int [][]Coordinate,int a,int b){
int i,j,k;
int [][]Temporary=new int [100][2];
k=0;
for(i=0;i<Coordinate.length;i++) {
for(j=0;j<8;j++) {
if(Coordinate[i][0]+dicoi[j]>=0&&Coordinate[i][1]+dicoj[j]>=0) // 保证下标不为负数
if(Coordinate[i][0]+dicoi[j]<NM.length)// 保证加过的下标为在NM数组的下标范围内 行
if(Coordinate[i][1]+dicoj[j]<NM[Coordinate[i][0]+dicoi[j]].length)
if(NM[Coordinate[i][0]+dicoi[j]][Coordinate[i][1]+dicoj[j]]==0){//保证不重复行走
NM[Coordinate[i][0]+dicoi[j]][Coordinate[i][1]+dicoj[j]]=NM[Coordinate[i][0]][ Coordinate[i][1]]+1;
Temporary[k][0]=Coordinate[i][0]+dicoi[j];
Temporary[k][1]=Coordinate[i][1]+dicoj[j];
++k;
}
}
}
if(k>1) {
int [][]fix=new int [k][2];
for(i=0;i<fix.length;i++) {
for(j=0;j<fix[i].length;j++) {
fix[i][j]=Temporary[i][j];
}
}
return fix;
}
else {
int [][]fix1=new int [1][1];
fix1[0][0]=-1;
return fix1;
}
}
}