#include<bits/stdc++.h>
using namespace std;
int dis[105][105];
int n;
int p;
int tre[20];
bool used[20];
int qpl[12];
int ans=99999999;
void cal(int a[])
{
int cnt=0;
if(p!=1)
{
for(int i=0; i<p-1; i++)
cnt+=dis[qpl[i]][qpl[i+1]];
cnt+=dis[qpl[p-1]][n];
}
if(p==1)
cnt=dis[1][tre[0]]+dis[tre[0]][n];
ans=min(ans,cnt);
}
void dfs(int k)
{
if(k==p)
{
cal(qpl);
return;
}
for(int i=0; i<p; i++)
{
if(!used[i])
{
used[i]=1;
qpl[k]=tre[i];
dfs(k+1);
used[i]=0;
}
}
}
int main()
{
cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
cin>>dis[i][j];
cin>>p;
for(int i=0; i<p; i++)
cin>>tre[i];
for(int k=1; k<=n; k++)
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
dfs(0);
cout<<ans;
}