#include<bits/stdc++.h>
using namespace std;
int n,f[505][505],g[505][505],del[505];
long long answer;
void shanchu(int );
void fuzhi();
int main() {
int i,j,k,s,p;
cin>>n;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++) {
cin>>g[i][j];
}
for(i=1; i<=n; i++)
cin>>del[i];
for(s=1; s<=n; s++) {
answer=0;
fuzhi();
for(k=1; k<=n; k++)
for(i=1; i<=n; i++)
for(j=1; j<=n; j++) {
if(i!=j)
if(f[i][j]==0&&f[i][k]!=0&&f[k][j]!=0||f[i][k]!=0&&f[k][j]!=0&&f[i][j]!=0&&f[i][k]+f[k][j]<f[i][j]) {
f[i][j]=f[i][k]+f[k][j];
}
}
for(j=1;j<=n;j++)
for(p=1;p<=n;p++)
{
answer+=f[j][p];
}
cout<<answer<<" ";
shanchu(del[s]);
}
return 0;
}
void shanchu(int x) {
int as;
for(as=1; as<=n; as++) {
g[as][x]=0;
g[x][as]=0;
}
}
void fuzhi()
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f[i][j]=g[i][j];
}