#include <fstream>
#define maxn 100
using namespace std;
int ad[maxn+5][maxn+5];
int main ()
{
ifstream fin ( "royfloyd.in" );
ofstream fout ( "royfloyd.out" );
int n;
fin >> n;
int i, j;
for ( i = 0; i < n; i++ )
for ( j = 0; j < n; j++ )
fin >> ad[i][j];
int k;
for ( k = 0; k < n; k++ )
for ( i = 0; i < n; i++ )
for ( j = 0; j < n; j++ )
if ( ad[i][k] > 0 && ad[k][j] > 0 && ( ad[i][k] + ad[k][j] < ad[i][j] || ( ad[i][j] == 0 && i != j ) ) )
ad[i][j] = ad[i][k] + ad[k][j];
for ( i = 0; i < n; i++, fout.put ( '\n' ) )
for ( j = 0; j < n; j++ )
fout << ad[i][j] << ' ';
fin.close ();
fout.close ();
return 0;
}