1 #include <bits/stdc++.h>
2 using namespace std;
3 #define pb push_back
4 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
5 #define INF 1000000003
6 #define ll long long
7 inline ll read()
8 {
9 ll ans = 0;
10 char ch = getchar(), last = ' ';
11 while(!isdigit(ch)) last = ch, ch = getchar();
12 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
13 if(last == '-') ans = -ans;
14 return ans;
15 }
16 inline void write(ll x)
17 {
18 if(x < 0) x = -x, putchar('-');
19 if(x >= 10) write(x / 10);
20 putchar(x % 10 + '0');
21 }
22 int n;
23 int mincost[103];
24 bool used[103];
25 struct edge
26 {
27 int to,cost;
28 };
29 vector<edge> G[103];
30 int V;
31 int MST()
32 {
33 _for(i,0,V)
34 {
35 mincost[i] = INF;
36 used[i] = false;
37 }
38
39 mincost[0] = 0;
40 int res = 0;
41
42 while(1)
43 {
44 int v = -1;
45 _for(u,1,V+1)
46 if(!used[u] && (v==-1 || mincost[u] < mincost[v]))
47 v = u;
48
49 if(v==-1) break;
50 used[v] = true;
51 res += mincost[v];
52
53 _for(u,0,G[v].size())
54 mincost[G[v][u].to] = min(mincost[G[v][u].to],G[v][u].cost);
55 }
56 return res;
57 }
58 int main()
59 {
60 V = read();
61 _for(i,1,V+1)
62 {
63 _for(j,1,i)
64 {
65 int c = read();
66 G[i].push_back({j,c}),G[j].push_back({i,c});
67 }
68 _for(j,1,V-i+2)
69 read();
70 }
71 write(MST());
72 return 0;
73 }