var
a:array[1..10000,1..3] of longint;
b:array[1..100,1..100] of longint;
t:array[1..3] of longint;
i,j,min,mij,ans,n,k:longint;
begin
ans:=0;
read(n);
for i:=1to n dofor j:=1to n doread(b[i,j]);
for i:=1to n-1dobegin
a[i,1]:=1;
a[i,2]:=i+1;
a[i,3]:=b[1,i+1];
end;
for i:=1to n-1dobegin
min:=maxlongint;
for j:=i to n-1dobeginif a[j,3]<min thenbegin min:=a[j,3]; mij:=j; end;
end;
if mij<>i thenbegin t:=a[i]; a[i]:=a[mij]; a[mij]:=t; end;
k:=a[i,2];
for j:=i+1to n-1dobeginif b[a[j,2],k]<a[j,3] thenbegin a[j,3]:=b[a[j,2],k]; a[j,1]:=k; end;
end;
ans:=ans+a[i,3];
end;
writeln(ans);
end.
kruskal
var
fa:array[1..100] of longint;
a:array[1..100000,1..3] of longint;
i,j,k,n,x,y,z,ans:longint;
functiongetfather(z:longint):longint;
beginif fa[z]=0then getfather:=z
elsebegin
fa[z]:=getfather(fa[z]);
getfather:=fa[z];
end;
end;
procedurebj(z,b:longint);begin
z:=getfather(z);
b:=getfather(b);
if z<>b then fa[z]:=b;
end;
proceduredg(i,j:longint);var
l,r,m:longint;
t:Array[1..3] of longint;
begin
l:=i;
r:=j;
m:=a[i,3];
repeatwhile a[j,3]>m do j:=j-1;
while a[i,3]<m do i:=i+1;
if j>=i thenbegin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
j:=j-1;
i:=i+1;
end;
until i>j;
if l<j then dg(l,j);
if i<r then dg(i,r);
end;
begin
assign(input,'kruskal.in'); reset(input);
assign(output,'kruskal.out'); rewrite(output);
read(n);
k:=1;
for i:=1to n dofor j:=1to n dobeginif i<j thenbegin
a[k,1]:=i;
a[k,2]:=j;
read(a[k,3]);
inc(k)
endelseread(z);
end;
ans:=0;
dec(k);
dg(1,k);
for i:=1to k dobegin
x:=getfather(a[i,1]);
y:=getfather(a[i,2]);
if x<>y thenbegin
ans:=ans+a[i,3];
bj(a[i,1],a[i,2]);
end;
end;
writeln(ans);
close(input); close(output);
end.