from math import inf

# initialize adjacent matrix
matrix = [
    [0,3,4,5,inf,inf,inf,inf,inf,inf,inf],
    [inf,0,inf,inf,3,1,4,inf,inf,inf,inf],
    [inf,inf,0,inf,1,4,1,inf,inf,inf,inf],
    [inf,inf,inf,0,1,1,5,inf,inf,inf,inf],
    [inf,inf,inf,inf,0,inf,inf,2,3,4,inf],
    [inf,inf,inf,inf,inf,0,inf,1,2,3,inf],
    [inf,inf,inf,inf,inf,inf,0,1,2,3,inf],
    [inf,inf,inf,inf,inf,inf,inf,0,inf,inf,5],
    [inf,inf,inf,inf,inf,inf,inf,inf,0,inf,1],
    [inf,inf,inf,inf,inf,inf,inf,inf,inf,0,4],
    [inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf],]

# vertices number
n = len(matrix)
# initialize DP table
table = [[inf] * n for x in range(n)]
# set the start node
table[0][0] = 0


for i in range(1, n):
    # find the shortest path to node v
    for v in range(n):
        table[i][v] = table[i - 1][v]  # start
        for k in range(n):
            # evaluate table
            table[i][v] = min(table[i][v], matrix[k][v] + table[i - 1][k])

for i in range(len(table)):
    print(table[i])