#include <iostream>
#include <cstdio>
#include <cstring>
#include "algorithm"
using namespace std;
int n,pos;
int op[10000];
int ed[10000];
int dis[10000];
int tmp[10000];
int father[110];
int cmp(int a,int b){return dis[a]<dis[b];}
int Find(int a){return father[a]==a?a:father[a]=Find(father[a]);}
int main(void)
{
int temp,ans;
while(scanf("%d",&n)!=EOF)
{
pos=0;ans=0;
for(int i=0;i<=n;i++)
father[i]=i;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&temp);
if(i==j) continue;
op[pos]=i;ed[pos]=j;dis[pos]=temp;tmp[pos]=pos;
pos++;
}
int cot,a,b;
scanf("%d",&cot);
for(int i=0;i<cot;i++)
{
scanf("%d%d",&a,&b);
father[Find(a)]=Find(b);
}
sort(tmp,tmp+pos,cmp);
for(int i=0;i<pos;i++)
{
int a=Find(op[tmp[i]]),b=Find(ed[tmp[i]]);
if(a==b) continue;
father[a]=b;
ans+=dis[tmp[i]];
}
printf("%d\n",ans);
}
}
#include <cstdio>
#include <cstring>
#include "algorithm"
using namespace std;
int n,pos;
int op[10000];
int ed[10000];
int dis[10000];
int tmp[10000];
int father[110];
int cmp(int a,int b){return dis[a]<dis[b];}
int Find(int a){return father[a]==a?a:father[a]=Find(father[a]);}
int main(void)
{
int temp,ans;
while(scanf("%d",&n)!=EOF)
{
pos=0;ans=0;
for(int i=0;i<=n;i++)
father[i]=i;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&temp);
if(i==j) continue;
op[pos]=i;ed[pos]=j;dis[pos]=temp;tmp[pos]=pos;
pos++;
}
int cot,a,b;
scanf("%d",&cot);
for(int i=0;i<cot;i++)
{
scanf("%d%d",&a,&b);
father[Find(a)]=Find(b);
}
sort(tmp,tmp+pos,cmp);
for(int i=0;i<pos;i++)
{
int a=Find(op[tmp[i]]),b=Find(ed[tmp[i]]);
if(a==b) continue;
father[a]=b;
ans+=dis[tmp[i]];
}
printf("%d\n",ans);
}
}