#include <bits/stdc++.h>
using namespace std;
int n;
long long a[550][550];
int b[550];
bool c[550];
int main() {
  scanf("%I64d", &n);
  for (int i = 0; i < n; i++)
    for (int h = 0; h < n; h++) scanf("%I64d", &a[i][h]);
  for (int i = 0; i < n; i++) {
    scanf("%I64d", &b[i]);
    b[i]--;
  }
  stack<long long> ans;
  for (int k = n - 1; k >= 0; k--) {
    long long sum = 0;
    c[b[k]] = true;
    for (int i = 0; i < n; i++)
      for (int h = 0; h < n; h++) {
        a[i][h] = min(a[i][h], a[i][b[k]] + a[b[k]][h]);
        if (c[i] == true && c[h] == true) sum += a[i][h];
      }
    ans.push(sum);
  }
  for (int i = 0; i < n; i++) {
    printf("%I64d ", ans.top());
    ans.pop();
  }
  return 0;
}
