#include<stdio.h>
#include<string.h>
#include<math.h>
#define INF 1e9
#define MAXN 1000
int a[MAXN][MAXN],lowcost[MAXN];
void prim(int n)
{
int i,j,k,min;
int s[MAXN];
for(i=1;i<=n;i++)
{
lowcost[i]=a[i][1];
s[i]=0;
}
s[1]=1;
for(i=1;i<n;i++)
{
min=INF;
j=1;
for(k=2;k<=n;k++)
if((lowcost[k]<min)&&(!s[k]))
{
min=lowcost[k];
j=k;
}
s[j]=1;
for(k=2;k<=n;k++)
if((a[k][j]<lowcost[k])&&(!s[k]))
lowcost[k]=a[k][j];
}
}
int main()
{
int i,n,sum,j;
while(~scanf("%d",&n))//n个结点
{
memset(a,0,sizeof(a));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);//n个结点的邻接矩阵
prim(n);
sum=0;
for(i=1;i<=n;i++)//最小生成树的最短路径
sum+=lowcost[i];
printf("%d\n",sum);
}
return 0;
}