#include <bits/stdc++.h>
//题目要求01矩阵的
//第一行除了A11只能有1个1
//最后一列除了Ann只能有1个1
//除了矩阵的四条边,里面的点要求该点所在行列1的个数各自相等
//最后可以发现 如果说题目给了一个完全图的边权矩阵,那么01矩阵就显示了在这个图上的的一条路径
//巧妙的修改spfa求最小环就oK
using namespace std;
#define LL long long
const int maxn=3e2+10;
int dis[maxn];
bool vis[maxn];
int a[maxn][maxn];
int n;
int spfa(int st)
{
queue<int>q;
memset(dis,0x3f,sizeof dis);
for(int i=1;i<=n;i++)
{
if(i==st)continue;
q.push(i);
vis[i]=true;
dis[i]=a[st][i];
}
while(!q.empty())
{
int u=q.front();q.pop();vis[u]=0;
for(int v=1;v<=n;v++)
{
if(v==u)continue;
if(dis[v]>dis[u]+a[u][v]){
dis[v]=dis[u]+a[u][v];
if(!vis[v])
q.push(v),
vis[v]=1;
}
}
}
// for(int i=1;i<=n;i++)
// printf("%d ",dis[i]);printf("\n");
return 0;
}
int main()
{
#ifdef shuaishuai
freopen("in.txt","r",stdin);
#endif // shuaishuai
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)scanf("%d",&a[i][j]);
int s,b,c;
spfa(1);
s=dis[1];
c=dis[n];
spfa(n);
b=dis[n];
printf("%d\n",min(c,s+b));
}
return 0;
}