//Aulene
//Kruskal was basically plagiarised from HackerEarth since I learnt it from there
#include<iostream>
#include<fstream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<climits>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<list>
using namespace std;
#define lli long long int
#define mod 1000000007
#define p push
#define pb push_back
#define mp make_pair
int a[2007][2007];
bool vis[2007][2007];
lli roots[2007];
pair< int, pair <int, int > > p[2000007];
int root(int x)
{
while(roots[x]!=x)
{
roots[x]=roots[roots[x]];
x=roots[x];
}
return x;
}
lli kruskal(int n)
{
int x, y, i, f, q;
lli cost, minCost=0;
for(i=0; i<n; i++)
{
x=p[i].second.first;
y=p[i].second.second;
cost=p[i].first;
f=root(x);
q=root(y);
if(f!=q)
{
minCost+=cost;
roots[f]=roots[q];
}
}
return minCost;
}
int main()
{
lli n, i, j, x=0;
lli ans;
cin >> n;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
scanf("%d", &a[i][j]);
for(i=1; i<=n; i++)
roots[i]=i;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(!vis[i][j] && i!=1 && j!=1 && i!=j) //ensure that 1 isn't present cuz its useless and stuff
{
p[x]=mp(a[i][j], mp(i, j));
vis[i][j]=1;
vis[j][i]=1;
x++;
}
sort(p, p+x);
ans=kruskal(x);
cout << ans << endl;
return 0;
}
Ly9BdWxlbmUKLy9LcnVza2FsIHdhcyBiYXNpY2FsbHkgcGxhZ2lhcmlzZWQgZnJvbSBIYWNrZXJFYXJ0aCBzaW5jZSBJIGxlYXJudCBpdCBmcm9tIHRoZXJlCiAKI2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGZzdHJlYW0+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8Y3N0cmluZz4KI2luY2x1ZGU8Y21hdGg+CiNpbmNsdWRlPGNsaW1pdHM+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxzdGFjaz4KI2luY2x1ZGU8c2V0PgojaW5jbHVkZTxsaXN0PgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKI2RlZmluZSBsbGkgbG9uZyBsb25nIGludAojZGVmaW5lIG1vZCAxMDAwMDAwMDA3CiNkZWZpbmUgcCBwdXNoCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiAKaW50IGFbMjAwN11bMjAwN107CmJvb2wgdmlzWzIwMDddWzIwMDddOwpsbGkgcm9vdHNbMjAwN107CnBhaXI8IGludCwgcGFpciA8aW50LCBpbnQgPiA+IHBbMjAwMDAwN107CiAKaW50IHJvb3QoaW50IHgpCnsKICAgIHdoaWxlKHJvb3RzW3hdIT14KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcm9vdHNbeF09cm9vdHNbcm9vdHNbeF1dOwogICAgICAgICAgICAgICAgICAgIHg9cm9vdHNbeF07CiAgICAgICAgICAgIH0KICAgIHJldHVybiB4Owp9CiAKbGxpIGtydXNrYWwoaW50IG4pCnsKICAgIGludCB4LCB5LCBpLCBmLCBxOwogICAgbGxpIGNvc3QsIG1pbkNvc3Q9MDsKCiAgICBmb3IoaT0wOyBpPG47IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIHg9cFtpXS5zZWNvbmQuZmlyc3Q7CiAgICAgICAgICAgIHk9cFtpXS5zZWNvbmQuc2Vjb25kOwogICAgICAgICAgICBjb3N0PXBbaV0uZmlyc3Q7CgogICAgICAgICAgICBmPXJvb3QoeCk7CiAgICAgICAgICAgIHE9cm9vdCh5KTsKCiAgICAgICAgICAgIGlmKGYhPXEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbkNvc3QrPWNvc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RzW2ZdPXJvb3RzW3FdOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICByZXR1cm4gbWluQ29zdDsKfQogCmludCBtYWluKCkKICAgIHsKICAgICAgICBsbGkgbiwgaSwgaiwgeD0wOwogICAgICAgIGxsaSBhbnM7CgogICAgICAgIGNpbiA+PiBuOwoKICAgICAgICBmb3IoaT0xOyBpPD1uOyBpKyspCiAgICAgICAgICAgIGZvcihqPTE7IGo8PW47IGorKykKICAgICAgICAgICAgc2NhbmYoIiVkIiwgJmFbaV1bal0pOwoKICAgICAgICBmb3IoaT0xOyBpPD1uOyBpKyspCiAgICAgICAgICAgIHJvb3RzW2ldPWk7CgogICAgICAgIGZvcihpPTE7IGk8PW47IGkrKykKICAgICAgICAgICAgZm9yKGo9MTsgajw9bjsgaisrKQogICAgICAgICAgICAgICAgaWYoIXZpc1tpXVtqXSAmJiBpIT0xICYmIGohPTEgJiYgaSE9aikgLy9lbnN1cmUgdGhhdCAxIGlzbid0IHByZXNlbnQgY3V6IGl0cyB1c2VsZXNzIGFuZCBzdHVmZgogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcFt4XT1tcChhW2ldW2pdLCBtcChpLCBqKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZpc1tpXVtqXT0xOwogICAgICAgICAgICAgICAgICAgICAgICB2aXNbal1baV09MTsKICAgICAgICAgICAgICAgICAgICAgICAgeCsrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICBzb3J0KHAsIHAreCk7CiAgICAgICAgYW5zPWtydXNrYWwoeCk7CgogICAgICAgIGNvdXQgPDwgYW5zIDw8IGVuZGw7CgogICAgICAgIHJldHVybiAwOwogICAgfQ==