#include <iostream>
#include <stack>
#include <sstream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 1000
int arr[N][N];
int temp[N][N];
int fill(int i, int j, int n)
{
if(i<0 || j< 0 || i>=n || j>=n)
return 0;
if(temp[i][j] != 0)
return temp[i][j];
int left=0,right=0,up=0,down=0;
if(i>0 && arr[i-1][j] == arr[i][j] +1)
up = fill(i-1,j,n);
if(i<n-1 && arr[i+1][j] == arr[i][j] +1)
down = fill(i+1,j,n);
if(j>0 && arr[i][j-1] == arr[i][j] +1)
left = fill(i,j-1,n);
if(j<n-1 && arr[i][j+1] == arr[i][j] +1)
right = fill(i,j+1,n);
temp[i][j] = max(max(up,down),max(left,right)) + 1;
return temp[i][j];
}
int main ()
{
int n;
cin>>n;
for(int i = 0 ; i < n ; i++)
{
for(int j = 0; j < n ; j++)
cin>>arr[i][j];
}
//memset(temp, 0, N*N);
for(int i = 0 ; i < n ; i++)
{
for(int j = 0; j < n ; j++)
fill(i,j,n);
}
for(int i = 0 ; i < n ; i++)
{
for(int j = 0; j < n ; j++)
cout<<temp[i][j]<<" ";
cout<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZTxjc3RkaW8+CiNpbmNsdWRlPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBOIDEwMDAKaW50IGFycltOXVtOXTsKaW50IHRlbXBbTl1bTl07CmludCBmaWxsKGludCBpLCBpbnQgaiwgaW50IG4pCnsgCgkKCWlmKGk8MCB8fCBqPCAwIHx8IGk+PW4gfHwgaj49bikgCgkJcmV0dXJuIDA7IAoKCWlmKHRlbXBbaV1bal0gIT0gMCkgCgkJcmV0dXJuIHRlbXBbaV1bal07IAoKCWludCBsZWZ0PTAscmlnaHQ9MCx1cD0wLGRvd249MDsgCglpZihpPjAgJiYgYXJyW2ktMV1bal0gPT0gYXJyW2ldW2pdICsxKSAKCQl1cCA9IGZpbGwoaS0xLGosbik7IAoJaWYoaTxuLTEgJiYgYXJyW2krMV1bal0gPT0gYXJyW2ldW2pdICsxKSAKCQlkb3duID0gZmlsbChpKzEsaixuKTsgCglpZihqPjAgJiYgYXJyW2ldW2otMV0gPT0gYXJyW2ldW2pdICsxKSAKCQlsZWZ0ID0gZmlsbChpLGotMSxuKTsgCglpZihqPG4tMSAmJiBhcnJbaV1baisxXSA9PSBhcnJbaV1bal0gKzEpIAoJCXJpZ2h0ID0gZmlsbChpLGorMSxuKTsgCgoJdGVtcFtpXVtqXSA9IG1heChtYXgodXAsZG93biksbWF4KGxlZnQscmlnaHQpKSArIDE7IAoJcmV0dXJuIHRlbXBbaV1bal07IAp9IAoKaW50IG1haW4gKCkKewoJaW50IG47CgljaW4+Pm47Cglmb3IoaW50IGkgPSAwIDsgaSA8IG4gOyBpKyspCgl7CgkJZm9yKGludCBqID0gMDsgaiA8IG4gOyBqKyspCgkJCWNpbj4+YXJyW2ldW2pdOwoJfQoJLy9tZW1zZXQodGVtcCwgMCwgTipOKTsKCWZvcihpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKykKCXsKCQlmb3IoaW50IGogPSAwOyBqIDwgbiA7IGorKykKCQkJZmlsbChpLGosbik7Cgl9Cglmb3IoaW50IGkgPSAwIDsgaSA8IG4gOyBpKyspCgl7CgkJZm9yKGludCBqID0gMDsgaiA8IG4gOyBqKyspCgkJCWNvdXQ8PHRlbXBbaV1bal08PCIgIjsKCQljb3V0PDxlbmRsOwoJfQoJcmV0dXJuIDA7Cn0K