#include <iostream>
#include <vector>
using namespace std;
using us = unsigned int;
using matrix_type = vector<vector<short>>;
void show_matrix(const matrix_type& adjacency_matrix)
{
for (const auto& line : adjacency_matrix)
{
for (const auto& el : line)
{
cout << el << " ";
}
cout << endl;
}
}
void floyd(matrix_type& adjacency_matrix)
{
us n = adjacency_matrix.size();
for (us k = 0; k < n; ++k)
{
for (us i = 0; i < n; ++i)
{
for (us j = 0; j < n; ++j)
{
if (adjacency_matrix[i][j] > adjacency_matrix[i][k] + adjacency_matrix[k][j])
{
adjacency_matrix[i][j] = adjacency_matrix[i][k] + adjacency_matrix[k][j];
}
}
}
}
}
void read_matrix(matrix_type& adjacency_matrix)
{
us n = adjacency_matrix.size();
for (us i = 0; i < n; ++i)
{
for (us j = 0; j < n; ++j)
{
cin >> adjacency_matrix[i][j];
}
}
}
int main()
{
us N;
cin >> N;
matrix_type adjacency_matrix(N, vector<short>(N));
read_matrix(adjacency_matrix);
floyd(adjacency_matrix);
show_matrix(adjacency_matrix);
return 0;
}