#include <cstdio>
#include <queue>
using namespace std;
const int SIZE = 1000;
int a[SIZE][SIZE],N;
bool Out(int x,int y){return x<0||y<0||x>=N||y>=N;}
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
int dp[SIZE][SIZE][2];
int main(){
scanf("%d",&N);
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)scanf("%d",&a[i][j]);
queue<int>qq;
dp[0][0][0]=dp[0][0][1]=1;
qq.push(0);
qq.push(0);
qq.push(0);
qq.push(0);
qq.push(0);
qq.push(1);
while(qq.size()){
int x=qq.front();qq.pop();
int y=qq.front();qq.pop();
int v=qq.front();qq.pop();
if(x==N-1&&y==N-1)return 0*printf("%d\\n",dp[x][y][v]);
for(int i=0;i<4;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(Out(nx,ny))continue;
if(dp[nx][ny][v^1])continue;
if(v!=(a[x][y]<a[nx][ny]))continue;
dp[nx][ny][v^1]=dp[x][y][v]+1;
qq.push(nx);qq.push(ny);qq.push(v^1);
}
}
return 0*puts("-1");
}