#include <stdio.h>
#define FIN "royfloyd.in"
#define FOUT "royfloyd.out"
#define MAX_NODURI 100
int mat[MAX_NODURI][MAX_NODURI], n;
void citire(){
FILE* in = fopen(FIN, "rt");
if(!in) return;
fscanf(in, "%d", &n);
for(int i=0; i < n; i++){
for(int j=0; j < n; j++){
fscanf(in, "%d", &mat[i][j]);
}
}
fclose(in);
}
void scriere(){
FILE* out = fopen(FOUT, "wt");
if(!out) return;
for(int i=0; i < n; i++){
for(int j=0; j < n; j++){
fprintf(out, "%d ", mat[i][j]);
}
fprintf(out, "\n");
}
fclose(out);
}
void RoyFloyd(){
for(int k=0; k < n; k++){
for(int i=0; i < n; i++){
for(int j=0; j < n; j++){
if (mat[i][k] && mat[k][j] &&
(mat[i][j] > mat[i][k] + mat[k][j] || !mat[i][j]) &&
i != j){
mat[i][j] = mat[i][k] + mat[k][j];
}
}
}
}
}
int main(){
citire();
RoyFloyd();
scriere();
return 0;
}