#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,e[1001][1001],k,j,i,t1,t2,t3;
int inf=99999999;
cin >> n >> m;
for(int i=1;i<=n;i++){//初始化二维数组e[10][10]
for(int j=1;j<=n;j++){
if(i==j) e[i][j]=0;//对自己的距离为0;
else e[i][j]=inf;
}
}
//读入边
for(int i=1;i<=m;i++){
cin >> t1 >> t2 >> t3;
e[t1][t2]=t3;
}
//Floyd算法
for(k=1;k<=n;k++){
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(e[i][j]>e[i][k]+e[k][j]){
e[i][j]=e[i][k]+e[k][j];
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++) cout << e[i][j] << " ";
printf("\n");
}
return 0;
}