#include<iostream>
#include<algorithm>
using namespace std;
int dp[1000][1000],h[1000][1000];
int n;
void l(int i,int j) {
if (!(i&&j)) return ;
if (dp[i][j]) return ;
int maxn=0;
int a,b,c,d;
if (h[i-1][j]<h[i][j])l(i+1,j);
if (h[i+1][j]<h[i][j])l(i-1,j);
if (h[i][j-1]<h[i][j])l(i,j-1);
if (h[i][j+1]<h[i][j])l(i,j+1);
if (h[i-1][j]<h[i][j]) maxn=max(dp[i-1][j],maxn);
if (h[i+1][j]<h[i][j]) maxn=max(dp[i+1][j],maxn);
if (h[i][j-1]<h[i][j]) maxn=max(dp[i][j-1],maxn);
if (h[i][j+1]<h[i][j]) maxn=max(dp[i][j+1],maxn);
dp[i][j]++;
}
int main()
{
cin>>n;
for (int i=0;i<1000;i++) for (int j=0;j<1000;j++) h[i][j]=(1<<30);
for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) cin>>h[i][j];
int maxn=0;
dp[1][1]=1;
l(1,1);
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++) {
if (dp[i][j]>maxn) maxn=dp[i][j];
cout<<dp[i][j]<<' ';
}
cout<<endl;
}
cout<<maxn;
return 0;
}