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
****************************************************************/