#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct point
{
int x,y;
long long v;
}a[9903];
int fat[9903],n,i,j,x,m=0,k=0,b;
long long tot=0;
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(point a,point b)
{
if(a.v<b.v) return 1;
else return 0;
}
int main()
{
//freopen(" ","r",stdin);
//freoprn(" ","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;
}
}
cin>>b;
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;
}