#include<iostream>#include<cstdio>#include<iomanip>#include<string>#include<cstdlib>#include<cstring>#include<queue>#include<set>#include<vector>#include<map>#include<algorithm>#include<cmath>#include<stack>#define INF 0x3f3f3f3f#define LINF 0x3f3f3f3f3f3f3f3f#define ll long long#define ull unsigned long long#define uint unsigned intusingnamespace std;int dx[]={0,1,-1,0};int dy[]={1,0,0,-1};int n, mmap[111][111], vis[111][111];int mmin, mmax;booldfs(int x,int y){if(x == n && y == n)return1;int nx, ny;for(int i =0; i <4; i++){
nx = x + dx[i];
ny = y + dy[i];if(mmap[nx][ny]> mmax || mmap[nx][ny]< mmin)continue;if(nx<1|| nx>n || ny<1|| ny>n||vis[nx][ny])continue;
vis[nx][ny]=1;if(dfs(nx, ny))return1;}return0;}boolc(int d){for(int i =0; i + d <=110; i++){memset(vis,0,sizeof(vis));
mmin = i, mmax = i + d;if((mmap[1][1]<= i + d && mmap[1][1]>= i)&&dfs(1,1))return1;}return0;}intmain(){scanf("%d",&n);for(int i =1; i <= n; i++)for(int j =1; j <= n; j++)scanf("%d",&mmap[i][j]);int l =0, r =110,mid;while(r > l){
mid =(r + l)/2;if(c(mid))r = mid;else l = mid +1;}printf("%d\n", r);return0;}