1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <set>
5 //#include <map>
6 #include <queue>
7 #define maxn 100009
8 using namespace std;
9 int a[maxn],map[200][200];
10 int main()
11 {
12 int n, m;
13 scanf("%d%d", &n, &m);
14 for(int i = 1; i <= m; i++)scanf("%d",&a[i]);
15 for(int i = 1; i <= n; i++)
16 {
17 for(int j = 1; j <= n; j++)
18 {
19 scanf("%d",&map[i][j]);
20 }
21 }
22 for(int k = 1; k <= n; k++)
23 {
24 for(int i = 1; i <= n; i++)if(i != k)
25 {
26 for(int j = 1; j <= n; j++)if(j != i && j != k)
27 {
28 map[i][j] = min(map[i][j], map[i][k] + map[k][j]);
29 }
30 }
31 }
32 int ans = map[1][a[1]] + map[a[m]][n];
33 for(int i = 1; i < m; i++)
34 {
35 ans += map[a[i]][a[i+1]];
36 }
37 printf("%d\n",ans);
38 return 0;
39 }