def print_matrix(matrix, iteration, matrix_name):
    print(f"After iteration {iteration}, {matrix_name}:")
    for row in matrix:
        formatted_row = ['  ∞' if x == float('inf') else f'{x:3}' for x in row]
        print('[{}]'.format(', '.join(formatted_row)))
    print()

def initialize_matrices(num_vertices, edges):
    inf = float('inf')
    D = [[inf if i != j else 0 for i in range(num_vertices)] for j in range(num_vertices)]
    P = [[0 if i != j else 0 for i in range(num_vertices)] for j in range(num_vertices)]

    for start, end, weight in edges:
        D[start][end] = weight
        P[start][end] = start + 1  

    return D, P

def floyd_warshall_with_printing(num_vertices, edges):
    D, P = initialize_matrices(num_vertices, edges)

    print_matrix(D, 0, "D0")
    print_matrix(P, 0, "P0")

    for k in range(num_vertices):
        for i in range(num_vertices):
            for j in range(num_vertices):
                if D[i][k] + D[k][j] < D[i][j]:
                    D[i][j] = D[i][k] + D[k][j]
                    P[i][j] = P[k][j]  

        print_matrix(D, k + 1, f"D{k + 1}")
        print_matrix(P, k + 1, f"P{k + 1}")

    return D, P

edges = [
    (0, 1, 4), (0, 5, 10), (1, 0, 3), (1, 3, 18),
    (2, 1, 6), (3, 1, 5), (3, 2, 15), (3, 4, 2),
    (3, 5, 19), (3, 6, 5), (4, 2, 12), (4, 3, 1),
    (5, 6, 10), (6, 3, 8)
]

num_vertices = 7

final_D, final_P = floyd_warshall_with_printing(num_vertices, edges)

print("Final Distance Matrix:")
for row in final_D:
    formatted_row = ['  ∞' if x == float('inf') else f'{x:3}' for x in row]  
    print('[{}]'.format(', '.join(formatted_row)))

print("\nFinal Predecessor Matrix:")
for row in final_P:
    formatted_row = [f'{x:3}' for x in row]  
    print('[{}]'.format(', '.join(formatted_row)))
 After iteration 0, D0:
[  0,   4,   ∞,   ∞,   ∞,  10,   ∞]
[  3,   0,   ∞,  18,   ∞,   ∞,   ∞]
[  ∞,   6,   0,   ∞,   ∞,   ∞,   ∞]
[  ∞,   5,  15,   0,   2,  19,   5]
[  ∞,   ∞,  12,   1,   0,   ∞,   ∞]
[  ∞,   ∞,   ∞,   ∞,   ∞,   0,  10]
[  ∞,   ∞,   ∞,   8,   ∞,   ∞,   0]

After iteration 0, P0:
[  0,   1,   0,   0,   0,   1,   0]
[  2,   0,   0,   2,   0,   0,   0]
[  0,   3,   0,   0,   0,   0,   0]
[  0,   4,   4,   0,   4,   4,   4]
[  0,   0,   5,   5,   0,   0,   0]
[  0,   0,   0,   0,   0,   0,   6]
[  0,   0,   0,   7,   0,   0,   0]

After iteration 1, D1:
[  0,   4,   ∞,   ∞,   ∞,  10,   ∞]
[  3,   0,   ∞,  18,   ∞,  13,   ∞]
[  ∞,   6,   0,   ∞,   ∞,   ∞,   ∞]
[  ∞,   5,  15,   0,   2,  19,   5]
[  ∞,   ∞,  12,   1,   0,   ∞,   ∞]
[  ∞,   ∞,   ∞,   ∞,   ∞,   0,  10]
[  ∞,   ∞,   ∞,   8,   ∞,   ∞,   0]

After iteration 1, P1:
[  0,   1,   0,   0,   0,   1,   0]
[  2,   0,   0,   2,   0,   1,   0]
[  0,   3,   0,   0,   0,   0,   0]
[  0,   4,   4,   0,   4,   4,   4]
[  0,   0,   5,   5,   0,   0,   0]
[  0,   0,   0,   0,   0,   0,   6]
[  0,   0,   0,   7,   0,   0,   0]

After iteration 2, D2:
[  0,   4,   ∞,  22,   ∞,  10,   ∞]
[  3,   0,   ∞,  18,   ∞,  13,   ∞]
[  9,   6,   0,  24,   ∞,  19,   ∞]
[  8,   5,  15,   0,   2,  18,   5]
[  ∞,   ∞,  12,   1,   0,   ∞,   ∞]
[  ∞,   ∞,   ∞,   ∞,   ∞,   0,  10]
[  ∞,   ∞,   ∞,   8,   ∞,   ∞,   0]

After iteration 2, P2:
[  0,   1,   0,   2,   0,   1,   0]
[  2,   0,   0,   2,   0,   1,   0]
[  2,   3,   0,   2,   0,   1,   0]
[  2,   4,   4,   0,   4,   1,   4]
[  0,   0,   5,   5,   0,   0,   0]
[  0,   0,   0,   0,   0,   0,   6]
[  0,   0,   0,   7,   0,   0,   0]

After iteration 3, D3:
[  0,   4,   ∞,  22,   ∞,  10,   ∞]
[  3,   0,   ∞,  18,   ∞,  13,   ∞]
[  9,   6,   0,  24,   ∞,  19,   ∞]
[  8,   5,  15,   0,   2,  18,   5]
[ 21,  18,  12,   1,   0,  31,   ∞]
[  ∞,   ∞,   ∞,   ∞,   ∞,   0,  10]
[  ∞,   ∞,   ∞,   8,   ∞,   ∞,   0]

After iteration 3, P3:
[  0,   1,   0,   2,   0,   1,   0]
[  2,   0,   0,   2,   0,   1,   0]
[  2,   3,   0,   2,   0,   1,   0]
[  2,   4,   4,   0,   4,   1,   4]
[  2,   3,   5,   5,   0,   1,   0]
[  0,   0,   0,   0,   0,   0,   6]
[  0,   0,   0,   7,   0,   0,   0]

After iteration 4, D4:
[  0,   4,  37,  22,  24,  10,  27]
[  3,   0,  33,  18,  20,  13,  23]
[  9,   6,   0,  24,  26,  19,  29]
[  8,   5,  15,   0,   2,  18,   5]
[  9,   6,  12,   1,   0,  19,   6]
[  ∞,   ∞,   ∞,   ∞,   ∞,   0,  10]
[ 16,  13,  23,   8,  10,  26,   0]

After iteration 4, P4:
[  0,   1,   4,   2,   4,   1,   4]
[  2,   0,   4,   2,   4,   1,   4]
[  2,   3,   0,   2,   4,   1,   4]
[  2,   4,   4,   0,   4,   1,   4]
[  2,   4,   5,   5,   0,   1,   4]
[  0,   0,   0,   0,   0,   0,   6]
[  2,   4,   4,   7,   4,   1,   0]

After iteration 5, D5:
[  0,   4,  36,  22,  24,  10,  27]
[  3,   0,  32,  18,  20,  13,  23]
[  9,   6,   0,  24,  26,  19,  29]
[  8,   5,  14,   0,   2,  18,   5]
[  9,   6,  12,   1,   0,  19,   6]
[  ∞,   ∞,   ∞,   ∞,   ∞,   0,  10]
[ 16,  13,  22,   8,  10,  26,   0]

After iteration 5, P5:
[  0,   1,   5,   2,   4,   1,   4]
[  2,   0,   5,   2,   4,   1,   4]
[  2,   3,   0,   2,   4,   1,   4]
[  2,   4,   5,   0,   4,   1,   4]
[  2,   4,   5,   5,   0,   1,   4]
[  0,   0,   0,   0,   0,   0,   6]
[  2,   4,   5,   7,   4,   1,   0]

After iteration 6, D6:
[  0,   4,  36,  22,  24,  10,  20]
[  3,   0,  32,  18,  20,  13,  23]
[  9,   6,   0,  24,  26,  19,  29]
[  8,   5,  14,   0,   2,  18,   5]
[  9,   6,  12,   1,   0,  19,   6]
[  ∞,   ∞,   ∞,   ∞,   ∞,   0,  10]
[ 16,  13,  22,   8,  10,  26,   0]

After iteration 6, P6:
[  0,   1,   5,   2,   4,   1,   6]
[  2,   0,   5,   2,   4,   1,   4]
[  2,   3,   0,   2,   4,   1,   4]
[  2,   4,   5,   0,   4,   1,   4]
[  2,   4,   5,   5,   0,   1,   4]
[  0,   0,   0,   0,   0,   0,   6]
[  2,   4,   5,   7,   4,   1,   0]

After iteration 7, D7:
[  0,   4,  36,  22,  24,  10,  20]
[  3,   0,  32,  18,  20,  13,  23]
[  9,   6,   0,  24,  26,  19,  29]
[  8,   5,  14,   0,   2,  18,   5]
[  9,   6,  12,   1,   0,  19,   6]
[ 26,  23,  32,  18,  20,   0,  10]
[ 16,  13,  22,   8,  10,  26,   0]

After iteration 7, P7:
[  0,   1,   5,   2,   4,   1,   6]
[  2,   0,   5,   2,   4,   1,   4]
[  2,   3,   0,   2,   4,   1,   4]
[  2,   4,   5,   0,   4,   1,   4]
[  2,   4,   5,   5,   0,   1,   4]
[  2,   4,   5,   7,   4,   0,   6]
[  2,   4,   5,   7,   4,   1,   0]

Final Distance Matrix:
[  0,   4,  36,  22,  24,  10,  20]
[  3,   0,  32,  18,  20,  13,  23]
[  9,   6,   0,  24,  26,  19,  29]
[  8,   5,  14,   0,   2,  18,   5]
[  9,   6,  12,   1,   0,  19,   6]
[ 26,  23,  32,  18,  20,   0,  10]
[ 16,  13,  22,   8,  10,  26,   0]

Final Predecessor Matrix:
[  0,   1,   5,   2,   4,   1,   6]
[  2,   0,   5,   2,   4,   1,   4]
[  2,   3,   0,   2,   4,   1,   4]
[  2,   4,   5,   0,   4,   1,   4]
[  2,   4,   5,   5,   0,   1,   4]
[  2,   4,   5,   7,   4,   0,   6]
[  2,   4,   5,   7,   4,   1,   0]

=== Code Execution Successful === i want the program to print '-' in the Predecessor matrix where there is a direct link between the 2 vertices