#include<cstdio>
int map[32][32];
int ncity;
int n;
int mins;
int f[8];
void dfs(int now,int sum,int flag)
{
int i;
if(flag==(1<<n)-1)
{
if(sum<mins)mins=sum;
}
else
for(i=0;i<n;i++)
if(!(flag&(1<<i)))
dfs(f[i],sum+map[now][f[i]],flag|(1<<i));
}
int main()
{
while(scanf("%d",&ncity),ncity)
{
int i,j;
for(i=0;i<ncity;i++)
for(j=0;j<ncity;j++)
scanf("%d",&map[i][j]);
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&f[i]);
}
mins=8000;
dfs(0,0,0);
printf("%d\n",mins);
}
return 0;
}