#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
int a[105][105], s[105], vis[105], n, p, ans=INF;
void dfs(int location, int num, int sum){
if(num==0){
ans=min(ans, sum+a[location][n]);
return ;
}
for(int i=1; i<=p; i++){
if(!vis[s[i]] || s[i]!=location){
dfs(s[i], num-1, sum+a[location][s[i]]);
vis[s[i]]=0;
}
}
}
int main(){
cin >> n;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++)
cin >> a[i][j];
}
for(int k=1; k<=n; k++){
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
if(i==j) continue;
a[i][j] = min(a[i][j], a[i][k]+a[k][j]);
}
}
}
cin >> p;
for(int i=1; i<=p; i++){
cin >> s[i];
}
dfs(1, p, 0);
cout << ans;
return 0;
}