#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define def 10000 //无限大
int main(){
int n,m;//顶点,边
int arr[10][10];
int k, i, j;
int side1, side2, s;
scanf("%d %d", &n, &m);
printf("welcome");
//初始化
//对边进行赋值
for (i = 1; i <= n; i++){
for (j = 1; j <= n; j++){
arr[i][j] = def;
if (i == j){
arr[i][i] = 0;
}
}
}
for (i = 0; i < m; i++){
scanf("%d %d %d", &side1, &side2, &s);
arr[side1][side2] = s;
}
for (i = 1; i <= n; i++){
for (j = 1; j <= n; j++){
printf("%d ", arr[i][j]);
}
printf("\n");
}
//
for (k = 1; k <= n; k++){
for (i = 1; i <= n; i++){
for (j = 1; j <= n; j++){
if (arr[i][j] > arr[i][k] + arr[k][j])
arr[i][j] = arr[i][k] + arr[k][j];//更新结点
}
}
}
for (i = 1; i <= n; i++){
for (j = 1; j <= n; j++){
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}