#include <bits/stdc++.h>
using namespace std;
long long int modpow(long long int a, long long int n, long long int temp) {
  long long int res = 1, y = a;
  while (n > 0) {
    if (n & 1) res = (res * y) % temp;
    y = (y * y) % temp;
    n /= 2;
  }
  return res % temp;
}
int dist[502][502], a[502], pres[502];
long long int ans[502];
int main() {
  int n, t;
  scanf("%d", &n);
  memset(pres, 0, sizeof(pres));
  t = n - 1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) scanf("%d", &dist[i][j]);
  }
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  for (int k = n - 1; k >= 0; k--) {
    pres[a[k] - 1] = 1;
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        dist[i][j] = min(dist[i][j], dist[i][a[k] - 1] + dist[a[k] - 1][j]);
      }
    }
    long long int tmp = 0;
    for (int l = n - 1; l >= k; l--) {
      for (int r = 0; r < n; r++)
        if (pres[r]) tmp += 1ll * dist[a[l] - 1][r];
    }
    ans[t--] = tmp;
  }
  for (int i = 0; i < n; i++) printf("%lld ", ans[i]);
  printf("\n");
  return 0;
}
