#include <bits/stdc++.h>
using namespace std;

const int INF = 1e9;

int main()
{   
    int N = 5;
    vector<vector<int>> adj_matrix(N, vector<int>(N, 0));
    
    // Create Adjacency Matrix
    adj_matrix[0][1] = 5; adj_matrix[0][3] = -3;
    adj_matrix[1][2] = 2;
    adj_matrix[2][4] = 2;
    adj_matrix[3][1] = 6;
    adj_matrix[3][4] = 12;

    // Create dist array
    auto dist = adj_matrix;
    for (int i=0; i<N; i++) {
        for (int j=0; j<N; j++) {
            if (dist[i][j] == 0 && i != j) dist[i][j] = INF;
        }
    }

    // Execute Floyd-Warshall Algorithm 
    for (int mid=0; mid<N; mid++) {
        for (int start=0; start<N; start++) {
            for (int end=0; end<N; end++) {
                if (dist[start][mid] == INF || dist[mid][end] == INF) continue;
                dist[start][end] = min(dist[start][end], dist[start][mid]+dist[mid][end]);
            }
        }
    }

    // Print result
    for (int i=0; i<N; i++) {
        for (int j=0; j<N; j++) {
            if (dist[i][j] == INF) cout << "∞" << ' ';
            else cout << dist[i][j] << ' ';
        }
        cout << '\n';
    }
    return 0;
}