#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 2e3 + 5;
const long long MaxVal = 1e2 + 5;
long long n;
long long a[MaxN][MaxN];
long long dx[4]={-1,0,1,0};
long long dy[4]={0,1,0,-1};
long long visited[MaxN][MaxN];
long long dis[MaxN][MaxN];
vector<pair<long long,long long>> pos[MaxVal];
bool used[MaxVal];
void bfs(long long i,long long j)
{
queue<pair<long long,long long>> qu;
qu.push({i,j});
visited[i][j]=true;
dis[i][j]=0;
while(!qu.empty())
{
long long x=qu.front().first;
long long y=qu.front().second;
qu.pop();
if(!used[a[x][y]])
{
used[a[x][y]]=true;
for(auto p:pos[a[x][y]])
{
long long new_x=p.first;
long long new_y=p.second;
if(!visited[new_x][new_y])
{
visited[new_x][new_y]=true;
dis[new_x][new_y]=dis[x][y]+1;
qu.push({new_x,new_y});
}
}
}
for(long long t=0;t<4;t++)
{
long long new_x=x+dx[t];
long long new_y=y+dy[t];
if(new_x<1||new_x>n||new_y<1||new_y>n)
{
continue;
}
if(!visited[new_x][new_y])
{
visited[new_x][new_y]=true;
dis[new_x][new_y]=dis[x][y]+1;
qu.push({new_x,new_y});
}
}
}
}
void input()
{
cin>>n;
for(long long i=1;i<=n;i++)
{
for(long long j=1;j<=n;j++)
{
cin>>a[i][j];
pos[a[i][j]].push_back({i,j});
visited[i][j]=false;
}
}
}
void solve()
{
bfs(1,1);
cout<<dis[n][n];
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
input();
solve();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGxvbmcgbG9uZyBNYXhOID0gMmUzICsgNTsKY29uc3QgbG9uZyBsb25nIE1heFZhbCA9IDFlMiArIDU7Cgpsb25nIGxvbmcgbjsKbG9uZyBsb25nIGFbTWF4Tl1bTWF4Tl07Cgpsb25nIGxvbmcgZHhbNF09ey0xLDAsMSwwfTsKbG9uZyBsb25nIGR5WzRdPXswLDEsMCwtMX07Cgpsb25nIGxvbmcgdmlzaXRlZFtNYXhOXVtNYXhOXTsKbG9uZyBsb25nIGRpc1tNYXhOXVtNYXhOXTsKCnZlY3RvcjxwYWlyPGxvbmcgbG9uZyxsb25nIGxvbmc+PiBwb3NbTWF4VmFsXTsKCmJvb2wgdXNlZFtNYXhWYWxdOwoKdm9pZCBiZnMobG9uZyBsb25nIGksbG9uZyBsb25nIGopCnsKICAgIHF1ZXVlPHBhaXI8bG9uZyBsb25nLGxvbmcgbG9uZz4+IHF1OwoKICAgIHF1LnB1c2goe2ksan0pOwoKICAgIHZpc2l0ZWRbaV1bal09dHJ1ZTsKICAgIGRpc1tpXVtqXT0wOwoKICAgIHdoaWxlKCFxdS5lbXB0eSgpKQogICAgewogICAgICAgIGxvbmcgbG9uZyB4PXF1LmZyb250KCkuZmlyc3Q7CiAgICAgICAgbG9uZyBsb25nIHk9cXUuZnJvbnQoKS5zZWNvbmQ7CgogICAgICAgIHF1LnBvcCgpOwoKICAgICAgICBpZighdXNlZFthW3hdW3ldXSkKICAgICAgICB7CiAgICAgICAgICAgIHVzZWRbYVt4XVt5XV09dHJ1ZTsKCiAgICAgICAgICAgIGZvcihhdXRvIHA6cG9zW2FbeF1beV1dKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsb25nIGxvbmcgbmV3X3g9cC5maXJzdDsKICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBuZXdfeT1wLnNlY29uZDsKCiAgICAgICAgICAgICAgICBpZighdmlzaXRlZFtuZXdfeF1bbmV3X3ldKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRbbmV3X3hdW25ld195XT10cnVlOwoKICAgICAgICAgICAgICAgICAgICBkaXNbbmV3X3hdW25ld195XT1kaXNbeF1beV0rMTsKCiAgICAgICAgICAgICAgICAgICAgcXUucHVzaCh7bmV3X3gsbmV3X3l9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICAgIGZvcihsb25nIGxvbmcgdD0wO3Q8NDt0KyspCiAgICAgICAgewogICAgICAgICAgICBsb25nIGxvbmcgbmV3X3g9eCtkeFt0XTsKICAgICAgICAgICAgbG9uZyBsb25nIG5ld195PXkrZHlbdF07CgogICAgICAgICAgICBpZihuZXdfeDwxfHxuZXdfeD5ufHxuZXdfeTwxfHxuZXdfeT5uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYoIXZpc2l0ZWRbbmV3X3hdW25ld195XSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmlzaXRlZFtuZXdfeF1bbmV3X3ldPXRydWU7CgogICAgICAgICAgICAgICAgZGlzW25ld194XVtuZXdfeV09ZGlzW3hdW3ldKzE7CgogICAgICAgICAgICAgICAgcXUucHVzaCh7bmV3X3gsbmV3X3l9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBpbnB1dCgpCnsKICAgIGNpbj4+bjsKCiAgICBmb3IobG9uZyBsb25nIGk9MTtpPD1uO2krKykKICAgIHsKICAgICAgICBmb3IobG9uZyBsb25nIGo9MTtqPD1uO2orKykKICAgICAgICB7CiAgICAgICAgICAgIGNpbj4+YVtpXVtqXTsKCiAgICAgICAgICAgIHBvc1thW2ldW2pdXS5wdXNoX2JhY2soe2ksan0pOwoKICAgICAgICAgICAgdmlzaXRlZFtpXVtqXT1mYWxzZTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgc29sdmUoKQp7CiAgICBiZnMoMSwxKTsKCiAgICBjb3V0PDxkaXNbbl1bbl07Cn0KCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CgogICAgaW5wdXQoKTsKICAgIHNvbHZlKCk7CgogICAgcmV0dXJuIDA7Cn0=