//题意:多个农场每个农场之间要连接光纤要让总的光纤长度尽可能的小
//每两个农场光纤之间的距离不超过100000
//思路:是一个最小生成树问题
//每两个农场光纤之间的距离不超过100000
//思路:是一个最小生成树问题
//172K 16MS
#include <iostream>
using namespace std;
#define MAX_N 105
#define INF 1<<19
int solvePrim(int(*cost)[105],int*mincost,bool used[],int V){
for (int i=0;i<V;++i)
{
mincost[i] = INF;
used[i] = false;
}
mincost[0] = 0;
int res =0;
while(true){
int v = -1;
for (int u=0;u<V;++u)
{
if (!used[u]&&(v==-1||mincost[u]<mincost[v]))
v = u;
}
if (v==-1)
break;
used[v] = true;//顶点加入X
res+=mincost[v];
for (int u=0;u<V;++u)
mincost[u] = min(mincost[u],cost[v][u]);
}
return res;
}
int main(){
int cost[MAX_N][MAX_N];//权值边
int mincost[MAX_N];//从集合到每个顶点的最小权值
bool used[MAX_N];//顶点i是否在集合中
int V;
while(scanf("%d",&V)==1&&V){
memset(cost,0,sizeof(0));
for (int i=0;i<V;++i)
for (int j=0;j<V;++j)
scanf("%d",&cost[i][j]);
int ret = solvePrim(cost,mincost,used,V);
printf("%d\n",ret);
}
return 0;
}