#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");
int mat[101][101];
const int INF = 1000000005;
int N;
vector<vector<int>> D;
int main()
{
fin >> N;
D.resize(N, vector<int>(N, INF));
for (int a = 0; a < N; a++)
{
for (int b = 0; b < N; b++)
{
fin >> mat[a][b];
}
}
for (int a = 0; a < N; a++)
{
for (int b = 0; b < N; b++)
{
if (mat[a][b] == 0 && a != b)
D[a][b] = INF;
else
D[a][b] = mat[a][b];
}
}
for (int k = 0; k < N; k++)
{
for (int a = 0; a < N; a++)
{
for (int b = 0; b < N; b++)
{
if (D[a][k] + D[k][b] < D[a][b])
{
D[a][b] = D[a][k] + D[k][b];
}
}
}
}
for (int a = 0; a < N; a++)
{
for (int b = 0; b < N; b++)
{
if (D[a][b] == INF) fout << 0 << " ";
else fout << D[a][b] << " ";
}
fout << "\n";
}
return 0;
}