#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#define INF 0x3f3f3f3f
#define NMAX 105
#define get_max(a,b) ((a)>(b)?(a):(b))
#define get_min(a,b) ((a)<(b)?(a):(b))
using namespace std;
ifstream in ( "royfloyd.in" );
ofstream out ( "royfloyd.out" );
int Cost[NMAX][NMAX] , Sol[NMAX][NMAX];
int N;
int main ( void )
{
int i , j , k ;
in >> N ;
for ( i = 1 ; i <= N ; ++i )
for ( j = 1 ; j <= N ; ++j )
in >> Cost[i][j] , ( Cost[i][j] == 0 ? Cost[i][j] = INF : Cost[i][j] = Cost[i][j] );
for ( k = 1 ; k <= N ; ++k )
for ( i = 1 ; i <= N ; ++i )
for ( j = 1 ; j <= N ; ++j )
if ( Cost[i][k] and Cost[k][j] and k!= i and k!=j and i !=j )
Cost[i][j] = get_min ( Cost[i][j] , Cost[i][k] + Cost[k][j] );
for ( i = 1 ; i <= N ; ++i , out << "\n" )
for ( j = 1 ; j <= N ; ++j )
out << ( Cost[i][j] == INF ? Cost[i][j] = 0 : Cost[i][j] = Cost[i][j] ) << " ";
in.close();
out.close();
return 0 ;
}