#include
#include
#include
#include
using namespace std;
int graph[555][555];
int shortest_path[555][555];
const int INF = 1e9;
int main()
{
int n, m;
cin >> n >> m;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
if(i == j) {
graph[i][j] = 0;
}
else {
graph[i][j] = 1e9;
}
}
}
for(int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
graph[a][b] = c;
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
shortest_path[i][j] = graph[i][j];
}
}
cout << endl;
for(int k = 1; k <= n; k++) {
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
if(shortest_path[i][k] != INF and shortest_path[k][j] != INF) {
shortest_path[i][j] = min(shortest_path[i][j], shortest_path[i][k] + shortest_path[k][j]);
}
}
}
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
cout << shortest_path[i][j] << " ";
}
cout << endl;
}
return 0;
}