#include <iostream>
#include <algorithm>
#include <cstdio>
#include <queue>
using namespace std;
typedef long long LL;
typedef pair<int, int>P;
const int INF = 11111111;
int a[105][105];//邻接矩阵
int vis[105] = {0}, dis[105];
LL ans = 0;
int n, cnt = 1;//n是顶点个数
void Prim() {//把0当成源点
priority_queue<P, vector<P>,greater<P> >que;
fill(vis, vis + n, 0);
while (!que.empty()) que.pop();
P q;
for (int i = 1; i < n; i++) {
if (a[0][i] != INF)
que.push(P(a[0][i],i));
}
vis[0] = 1;
while (cnt < n) {//cnt是最小生成树的顶点数
q = que.top();
que.pop();
if (vis[q.second]) continue;
ans += q.first;
vis[q.second] = 1;
cnt++;
for (int i = 0; i < n; i++) {
if (!vis[i]) {
que.push(P(a[q.second][i],i));
}
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
while (cin >> n) {
//cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> a[i][j];
}
}
Prim();
cout << ans << endl;
ans = 0;
cnt = 1;
}
return 0;
}