#include<bits/stdc++.h>
using namespace std;
int n,a[1005][1005],book[1005][1005],h=1,t;
struct node{
int x,y,step;
}q[1000005];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
book[1][1]=1;
q[++t]={1,1,0};
while(h<=t){
node tmp=q[h];
h++;
if(tmp.x==n&&tmp.y==n){
cout<<tmp.step+1;
return 0;
}
for(int i=1;i<=n;i++){
int xx=tmp.x,xy=tmp.y+i;
if(xy<=n&&a[tmp.x][tmp.y]>a[xx][xy]){
if(book[xx][xy]) continue;
book[xx][xy]=1;
q[++t]={xx,xy,tmp.step+1};
}
else break;
}
for(int i=1;i<=n;i++){
int xx=tmp.x,xy=tmp.y-i;
if(xy>=1&&a[tmp.x][tmp.y]>a[xx][xy]){
if(book[xx][xy]) continue;
book[xx][xy]=1;
q[++t]={xx,xy,tmp.step+1};
}
else break;
}
int xx=tmp.x+1,xy=tmp.y;
if(xx<=n&&!book[xx][xy]){
book[xx][xy]=1;
q[++t]={xx,xy,tmp.step+1};
}
xx=tmp.x,xy=tmp.y+1;
if(xy<=n&&!book[xx][xy]){
book[xx][xy]=1;
q[++t]={xx,xy,tmp.step+1};
}
}
return 0;
}