#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<stack>
#define N 200000
#include<math.h>
#include<queue>
#include<vector>
#define ll long long
#define maxn 105
#define inf 500000
using namespace std;
int n;
int edge[maxn][maxn];/// 边
char s[10];/// 用于输入
int dist[maxn];/// 记录路径最短长度
bool vis[maxn];/// 记录该节点是否拜访
void dijkstra(){/// 参考刘汝佳介绍最原始的的dijkstra函数
for(int i=1;i<=n;i++){
dist[i]=inf;
}
dist[1]=0;
memset(vis,false,sizeof(vis));
for(int i=0;i<=n;i++){
int u,m;
m=inf;
for(int j=0;j<=n;j++){
if(dist[j]<m&&!vis[j]){
u=j;
m=dist[j];
}
}
vis[u]=true;
for(int v=1;v<=n;v++){
if(dist[v]>dist[u]+edge[u][v]){
dist[v]=dist[u]+edge[u][v];
}
}
}
}
int trans(char *str){
int a=0;
int lenth=strlen(str);
for(int i=0;i<lenth;i++){
a*=10;
a+=str[i]-'0';
}
return a;
}
int main(){
//freopen("input2.txt","r",stdin);
cin>>n;
for(int i=0;i<maxn;i++){
for(int j=0;j<maxn;j++){
edge[i][j]=inf;
}
}
for(int i=2;i<=n;i++){
for(int j=1;j<i;j++){
scanf("%s",s);
if(s[0]=='x'){
edge[i][j]=inf;
}
else{
edge[i][j]=trans(s);
edge[j][i]=trans(s);
}
}
edge[i][i]=0;
}
dijkstra();
int ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,dist[i]);
}
cout<<ans<<endl;
return 0;
}