#include <iostream>
#include <cstring>
using namespace std;
#define INF 100000
#define MAX 100
int map[MAX][MAX];
int main()
{
	int n,i,j,k;
	cin>>n;
	memset(map,0,sizeof(map));
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
		{
			cin>>map[i][j];
			if(i!=j&&!map[i][j])
				map[i][j]=INF;
		}
	for(k=0;k<n;k++)
		for(i=0;i<n;i++)
			for(j=0;j<n;j++)
				if(map[i][j]>map[i][k]+map[k][j])  //map[i][k]!=0&&map[k][j]&&
					map[i][j]=map[i][k]+map[k][j];
	for(i=0;i<n;i++)
	{
		for(j=0;j<n-1;j++)
			if(map[i][j]==INF)
				cout<<"-1"<<" ";
			else
				cout<<map[i][j]<<" ";
		if(map[i][j]==INF)
				cout<<"-1"<<" ";
			else
				cout<<map[i][j]<<" ";
		cout<<'\n';
	}
	return 0;
}

/**************************************************************
	Problem: 2166
	User: admin
	Language: C++
	Result: Accepted
	Time:4 ms
	Memory:2112 kb
****************************************************************/