#include <iostream>
#include <cstdio>
using namespace std;
const int N_max = 102;
int pred[N_max][N_max]; // pred[i][j] == PENULTIMUL VARF PE UN DRUM DE COST MINIM DE LA i LA j
int d[N_max][N_max];
int N;
void citire()
{
int i, j;
scanf("%d", &N);
for(i = 1; i <= N; i++)
for(j = 1; j <= N; j++) scanf("%d", &d[i][j]);
}
void roy_floyd()
{
int k, i, j;
for(k = 1; k <= N; k++)
for(i = 1; i <= N; i++)
for(j = 1; j <= N; j++)
if( (d[i][j] > d[i][k] + d[k][j] || !d[i][j]) && i != j && d[i][k] && d[k][j] )
{
d[i][j] = d[i][k] + d[k][j];
pred[i][j] = pred[k][j];
}
}
void afisare()
{
int i, j;
for(i = 1; i <= N; i++)
{
for(j = 1; j <= N; j++) printf("%d ", d[i][j]);
printf("\n");
}
}
void drum(int x, int y)
{
if(x != y) drum(x, pred[x][y]);
printf("%d ", y);
}
int main()
{
freopen("royfloyd.in", "r", stdin);
freopen("royfloyd.out", "w", stdout);
citire();
roy_floyd();
afisare();
//drum();
return 0;
}