#include <fstream>
using namespace std;
const string txt = "royfloyd";
const int inf = 1e6;
ifstream f(txt + ".in");
ofstream g(txt + ".out");
int roy[105][105], a[55][55], n, m;
pair<int, int> v[2000];
static void clean()
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
roy[i][j] = inf;
}
static void solv()
{
f >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
f >> roy[i][j];
if (!roy[i][j]) roy[i][j] = inf;
}
/*clean();
f >> n >> m;
for (int i = 1; i <= m; i++)
f >> v[i].first >> v[i].second;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
f >> a[i][j];
for (int i = 1; i <= m; i++)
roy[v[i].first][v[i].second] = roy[v[i].second][v[i].first] = a[v[i].first][v[i].second];
*/
for (int k = 1; k <= n; k++)
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (roy[i][j] > roy[i][k] + roy[k][j])
roy[i][j] = roy[i][k] + roy[k][j];
//int oki = 1;
for (int i = 1; i <= n; i++, g << '\n')
for (int j = 1; j <= n; j++)
g << (roy[i][j] == inf ? 0 : roy[i][j]) << " ";
//if (roy[i][j] < a[i][j])
// oki = 0;
//g << (oki ? "DA" : "NU") << '\n';
}
int main()
{
int q; //f >> q;
q = 1;
for (; q >= 1; q--)
solv();
return 0;
}