#include <bits/stdc++.h>
#define ll long long int
#define endl "\n"
#define pb push_back
#define lb lower_bound
#define yes cout<<"YES"<<"\n"
#define no cout<<"NO"<<"\n"
const ll N = 510;
const ll INF = 1e9+10;
using namespace std;
ll dist[N][N];
int main() {
// directed graph
ios_base::sync_with_stdio(false);
cin.tie(0);
// set all dist to INF
for(ll i = 0; i < N; i++){
for(ll j = 0; j < N; j++) {
if(i == j) dist[i][j] = 0;
else dist[i][j] = INF;
}
}
ll n, m; cin >> n >> m;
for(ll i = 0; i < m; i++) {
ll x, y, wt;
cin >> x >> y >> wt;
dist[x][y] = wt;
}
// main algorithm
for(ll k = 1; k <= n; k++)
for(ll i = 1; i <= n; i++)
for(ll j = 1; j <= n; j++) {
if(dist[i][k] != INF && dist[k][j] != INF)
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
}
// display
for(ll i = 1; i <= n; i++) {
for(ll j = 1; j <= n; j++) {
dist[i][j] == INF ? cout << "I" << " " : cout << dist[i][j] << " ";
}
cout << endl;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAojZGVmaW5lIGVuZGwgIlxuIgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGxiIGxvd2VyX2JvdW5kCiNkZWZpbmUgeWVzIGNvdXQ8PCJZRVMiPDwiXG4iCiNkZWZpbmUgbm8gY291dDw8Ik5PIjw8IlxuIgpjb25zdCBsbCBOID0gNTEwOyAKY29uc3QgbGwgSU5GID0gMWU5KzEwOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbGwgZGlzdFtOXVtOXTsKCmludCBtYWluKCkgewogICAgLy8gZGlyZWN0ZWQgZ3JhcGgKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsKICAgIC8vIHNldCBhbGwgZGlzdCB0byBJTkYKICAgIGZvcihsbCBpID0gMDsgaSA8IE47IGkrKyl7CiAgICAgICAgZm9yKGxsIGogPSAwOyBqIDwgTjsgaisrKSB7CiAgICAgICAgICAgIGlmKGkgPT0gaikgZGlzdFtpXVtqXSA9IDA7CiAgICAgICAgICAgIGVsc2UgZGlzdFtpXVtqXSA9IElORjsKICAgICAgICB9CiAgICB9CiAgICBsbCBuLCBtOyBjaW4gPj4gbiA+PiBtOwogICAgZm9yKGxsIGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgICAgbGwgeCwgeSwgd3Q7CiAgICAgICAgY2luID4+IHggPj4geSA+PiB3dDsKICAgICAgICBkaXN0W3hdW3ldID0gd3Q7CiAgICB9CiAgICAvLyBtYWluIGFsZ29yaXRobQogICAgZm9yKGxsIGsgPSAxOyBrIDw9IG47IGsrKykgCiAgICAgICAgZm9yKGxsIGkgPSAxOyBpIDw9IG47IGkrKykgCiAgICAgICAgICAgIGZvcihsbCBqID0gMTsgaiA8PSBuOyBqKyspIHsKICAgICAgICAgICAgICAgIGlmKGRpc3RbaV1ba10gIT0gSU5GICYmIGRpc3Rba11bal0gIT0gSU5GKQogICAgICAgICAgICAgICAgICAgIGRpc3RbaV1bal0gPSBtaW4oZGlzdFtpXVtqXSwgZGlzdFtpXVtrXSArIGRpc3Rba11bal0pOwogICAgICAgICAgICB9CgogICAgLy8gZGlzcGxheQogICAgZm9yKGxsIGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGZvcihsbCBqID0gMTsgaiA8PSBuOyBqKyspIHsKICAgICAgICAgICAgZGlzdFtpXVtqXSA9PSBJTkYgPyBjb3V0IDw8ICJJIiA8PCAiICIgOiBjb3V0IDw8IGRpc3RbaV1bal0gPDwgIiAiOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9Cn0=