import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Main {
static int[][] dist;
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(new FileReader("royfloyd.in"));
int nodes = input.nextInt();
dist = new int[nodes][nodes];
for (int i = 0; i < nodes; i++)
for (int j = 0; j < nodes; j++) {
int c = input.nextInt();
if (c == 0)
dist[i][j] = 1000;
else
dist[i][j] = c;
}
input.close();
for (int k = 0; k < nodes; k++) {
for (int i = 0; i < nodes; i++) {
for (int j = 0; j < nodes; j++) {
if (i != j)
dist[i][j] = Math.min(dist[i][j], dist[i][k] + dist[k][j]);
}
}
}
BufferedWriter write = new BufferedWriter(new FileWriter(new File("royfloyd.out")));
for (int i = 0; i < nodes; i++) {
for (int j = 0; j < nodes; j++)
if (dist[i][j] == 1000)
write.write("0 ");
else
write.write(dist[i][j] + " ");
write.newLine();
}
write.close();
}
}