#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");
vector<vector<int>> a;
void floyd(vector<vector<int>>& a){
int n = a.size();
for ( int k = 0; k < n; k++ ){
for ( int i = 0; i < n; i++ ){
for ( int j = 0; j < n; j++ ){
a[i][j] = min(a[i][j], a[i][k] + a[k][j]);
}
}
}
}
int main() {
int N;
fin >> N;
a.resize(N, vector<int>(N));
for ( int i = 0; i < N; i++ ){
for ( int j = 0; j < N; j++ ){
fin >> a[i][j];
}
}
floyd(a);
for ( int i = 0; i < N; i++ ){
for ( int j = 0; j < N; j++ ){
fout << a[i][j] << ' ';
}
fout << '\n';
}
return 0;
}