#includeusing namespace std; const int N = 210, M = 1010; int l, n; int c[N][N]; int a[M]; int f[M][N][N]; signed main() { scanf("%d%d", &l, &n); for (int i = 1; i <= l; i ++) for (int j = 1; j <= l; j ++) scanf("%d", &c[i][j]); for (int i = 1; i <= n; i ++) scanf("%d", &a[i]); memset(f, 0x3f, sizeof f); a[0] = 3; f[0][1][2] = 0; for (int i = 0; i <= n - 1; i ++) for (int x = 1; x <= l; x ++) for (int y = 1; y <= l; y ++) { int z = a[i], pos = a[i + 1]; if (x == y || y == z || x == z) continue; //if (f[i][x][y] >= 0x3f) continue; f[i + 1][x][y] = min(f[i + 1][x][y], f[i][x][y] + c[z][pos]); f[i + 1][z][y] = min(f[i + 1][z][y], f[i][x][y] + c[x][pos]); f[i + 1][x][z] = min(f[i + 1][x][z], f[i][x][y] + c[y][pos]); } int mx = INT_MAX; for (int i = 1; i <= l; i ++) for (int j = 1; j <= l; j ++) { mx = min(mx, f[n][i][j]); } printf("%d", mx); return 0; }



