#include<iostream>
#include<cstring>
#include<queue>
#define int long long
using namespace std;
const int N=5100;
int n,to[N],he[N],wh[N],ne[N],cnt;
int vis[N],a[N][N],d[N];
void add(int a,int b,int w){
to[++cnt]=b,wh[cnt]=w,ne[cnt]=he[a],he[a]=cnt;
}
void dijkstra(){
priority_queue< pair<int,int> > q;
memset(d,0x3f,sizeof(d));
d[1]=0;
q.push({0,1});
while(q.size()){
int x=q.top().second;
q.pop();
if(vis[x]) continue;
vis[x]=1;
for(int i=he[x];i;i=ne[i]){
int k=to[i],w=wh[i];
if(d[k]>d[x]+w){
d[k]=d[x]+w;
q.push({-d[k],k});
}
}
}
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
scanf("%lld",&a[i][j]);
add(i,j,a[i][j]);
}
}
dijkstra();
printf("%lld",d[n]);
return 0;
}