var
a,s:array[1..100,1..100]of longint;
i,j,k,n:longint;
function min(i,j:longint):longint;
begin
if i>j then min:=j
else min:=i;
end;
begin
readln(n);
for i:=1 to n do
for j:=1 to n do
read(a[i,j]);
for i:=1 to n do
for j:=1 to n do
if a[i,j]=0 then s[i,j]:=maxlongint div 3
else s[i,j]:=a[i,j];
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
s[i,j]:=min(s[i,j],s[i,k]+s[k,j]);
for i:=1 to n do
begin
for j:=1 to n do
if i=j then write('0 ')
else if s[i,j]=maxlongint div 3 then write('-1 ')
else write(s[i,j],' ');
writeln;
end;
end.
/**************************************************************
Problem: 2166
User: admin
Language: Pascal
Result: Wrong Answer
****************************************************************/