#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct point
{
int x;
int y;
int v;
};
point a[9901];
int fat[101];
int n,i,j,x,m,tot,k;
int father(int x)
{
if(fat[x]!=x)fat[x]=father(fat[x]);
return fat[x];
}
void unionn(int x,int y)
{
int fa=father(x);
int fb=father(y);
if(fa!=fb)fat[fa]=fb;
}
int cmp(const point&a,const point&b)
{
if(a.v<b.v)return 1;
else return 0;
}
int main()
{
freopen("agrinet.in","r",stdin);
freopen("agrinet.out","w",stdout);
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cin>>x;
if(x!=0)
{
m++;
a[m].x=i;a[m].y=j;a[m].v=x;
}
}
for(i=1;i<=n;i++)fat[i]=i;
sort(a+1,a+m+1,cmp);
for(i=1;i<=m;i++)
{
if(father(a[i].x)!=father(a[i].y))
{
unionn(a[i].x,a[i].y);
tot+=a[i].v;
k++;
}
if(k==n-1)break;
}
cout<<tot;
return 0;
}