#include #define MAX 111 using namespace std; int n, a[MAX][MAX], visited[MAX][MAX], res; void DFS(int x , int y , int st, int en) { if (x==n && y==n) return ; for (int i=-1; i<=1; i++) for (int j=-1; j<=1;j++) { if ((i==0 )^ (j==0) && !visited[x+i][y+j]) { if (x+i>0 && x+i<=n && y+j>0 && y+j<=n && a[x+i][y+j]>=st && a[x+i][y+j]<=en) { visited[x+i][y+j]=true; DFS(x+i, y+j, st,en); visited[x+i][y+j]=false; } } } } int main() { cin >> n; for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) cin >> a[i][j]; int l=0, r=MAX; while (l<=r) { int mid=(l+r) /2; for (int i=0; i<= a[1][1]; i++) { memset(visited,0,sizeof visited); visited[1][1]=true; DFS(1,1,i,i+mid); if (visited[n][n]) { break; } } if (visited[n][n]) { cout<