#include<iostream>
#include<algorithm>
using namespace std;
int dis[100][100];
const int inf = 210000;
int main()
{
int n,m;
cin>>n>>m;
int x,y,z;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
dis[i][j]=inf;
if(i==j){dis[i][j]=0;}
}
}
for(int i=1;i<=m;i++){
cin>>x>>y>>z;
dis[x][y]=dis[y][x]=z;
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(dis[i][j]>dis[i][k]+dis[k][j]){
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<dis[i][j]<<" ";
}
cout<<endl;
}
}