#include <bits/stdc++.h>
using namespace std;
long long m[505][505];
int ord[505];
int main() {
  int n;
  cin >> n;
  memset(m, 0x7f7f7f, sizeof(m));
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      cin >> m[i][j];
    }
  }
  for (int i = 0; i < n; i++) {
    scanf(" %d", &ord[i]);
    ord[i]--;
  }
  reverse(ord, ord + n);
  vector<long long> res;
  for (int k = 0; k < n; k++) {
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        if (i == j) continue;
        m[i][j] = min(m[i][j], m[i][ord[k]] + m[ord[k]][j]);
      }
    }
    long long sum = 0;
    for (int i = 0; i <= k; i++) {
      for (int j = 0; j <= k; j++) {
        if (ord[i] == ord[j]) continue;
        sum += m[ord[i]][ord[j]];
      }
    }
    res.push_back(sum);
  }
  reverse(res.begin(), res.end());
  for (int i = 0; i < res.size(); i++) {
    if (i) cout << ' ';
    cout << res[i];
  }
  cout << '\n';
  return 0;
}
