# include <cstdio>
# include <algorithm>
using namespace std;
# define N 100 + 5
# define M 5000 + 5
int n, m;
int p[N];
int u[M], v[M], w[M], r[M];
void read_graph(void)
{
int tmp;
m = 0;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
{
scanf("%d", &tmp);
if (i <= j) continue;
++m;
u[m] = i, v[m] = j, w[m] = tmp;
}
}
int cmp(int x, int y) {return w[x]<w[y];}
int find(int x) {return x==p[x] ? x:(p[x]=find(p[x]));}
int kruskal(int n, int m)
{
int ret = 0;
for (int i = 1; i <= n; ++i) p[i] = i;
for (int i = 1; i <= m; ++i) r[i] = i;
sort(r+1, r+1+m, cmp);
for (int i = 1; i <= m; ++i)
{
int e = r[i];
int x = find(u[e]);
int y = find(v[e]);
if (x != y)
{
ret += w[e];
p[y] = x;
}
}
return ret;
}
int main()
{
while (~scanf("%d", &n))
{
read_graph();
printf("%d\n", kruskal(n, m));
}
return 0;
}