Greg has a weighed directed graph, consisting of n vertices. In this graph any pair of distinct vertices has an edge between them in both directions. Greg loves playing with the graph and now he has invented a new game:
Help Greg, print the value of the required sum before each step.
The first line contains integer n (1≤n≤500) − the number of vertices in the graph.
Next n lines contain n integers each − the graph adjacency matrix: the j-th number in the i-th line aij (1≤aij≤105,aii=0) represents the weight of the edge that goes from vertex i to vertex j.
The next line contains n distinct integers: x1,x2,...,xn (1≤xi≤n) − the vertices that Greg deletes.
Print n integers − the i-th number equals the required sum before the i-th step.
Please, do not use the %lld specifier to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams of the %I64d specifier.
1
0
1
0
2
0 5
4 0
1 2
9 0
4
0 3 1 1
6 0 400 1
2 4 0 1
1 1 1 0
4 1 2 3
17 23 404 0