#include<iostream>
#include<cmath>
#include<bitset>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<map>
#include<set>
#include<deque>
#include<queue>
#include<stack>
#include<string>
#include<vector>
#include<utility>
#include<unordered_map>
#define endl '\n'
#define int long long
using namespace std;
const int N=1e3+10;
const int mod=1e9+7;
bool v[N][N];
int f[N][N];
int n,m;
int x,y;
int dx[8]={1,2,1,2,-2,-1,-1,-2};
int dy[8]={2,1,-2,-1,1,2,-2,-1};
void dfs(int x,int y,int num)
{
for(int i=0;i<=7;i++)
{
if(x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=m)
{
if(v[x+dx[i]][y+dy[i]])
f[x+dx[i]][y+dy[i]]=min(num,f[x+dx[i]][y+dy[i]]);
else
{
v[x+dx[i]][y+dy[i]]=true;
f[x+dx[i]][y+dy[i]]=num;
dfs(x+dx[i],y+dy[i],num+1);
}
}
}
}
void solve()
{
cin >> n >> m;
cin >> x >> y;
memset(f,0x3f,sizeof f);
v[x][y]=true;
f[x][y]=0;
dfs(x,y,1);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(v[i][j])
cout << f[i][j] << ' ';
else cout << -1 << ' ';
}
cout << endl;
}
}
signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
solve();
return 0;
}