#include <iostream>
#include<cmath>
using namespace std;
long long int board[401][401];//表示该点是否走过;
int length, width;//确定长和宽
int hang0, lie0; int t, sum[301], road;//sum出差到某点的步数,road表示到某点的第几条路;
bool arrive;//hang0,lie0表示初始点的位置
int hang_move[8] = { 1,1,2,2,-1,-1,-2,-2 };
int lie_move[8] = { 2,-2,1,-1,2,-2,1,-1 };
void moveto1(int hang1, int lie1) { //t表示移动步数
board[hang1][lie1] = 1;
if (hang1 == hang0&& lie1 == lie0) {
sum[road] = t;
road++;
arrive = true;
}
else
{
t++;
int i1, j1, k;
for (k = 0; k < 8; k++) {
i1 = hang1 + hang_move[k];
j1 = lie1 + lie_move[k];
if (i1 > 0 && j1 > 0 && i1 <= length && j1 <= width && board[i1][j1] != 1)
{
moveto1(i1, j1);
}
}
}
}
int main()
{
cin >> length >> width;
cin >> hang0 >> lie0;
for (int i = 1; i <= length; i++) {
for (int j = 1; j <= width; j++) {
for (int i = 1; i <= length; i++) {
for (int j = 1; j <= width; j++)
board[i][j] = 0;//将棋盘上每个点归零
}
arrive = false;
t = 0;
road = 0;
moveto1(i, j);
if (arrive == true) {
int min = sum[0];
for (int i = 1; i < road; i++)
if (sum[i] < min)
min = sum[i];
cout << min << " ";
}
else
cout << "-1" << " ";
}
cout << endl;
}
}