#include <bits/stdc++.h>
using namespace std;
const int maxn = 2000;
int n, m;
vector<pair<int, int>> adj[maxn];
int t[maxn];
queue<int> q;
bool inq[maxn];
int main() {
scanf("%d%d", &n, &m);
for (int i = 0; i < m; ++i) {
int u, v, w;
scanf("%d%d%d", &v, &u, &w), u--, v--;
adj[u].push_back({v, w});
}
for (int i = 0; i < n; ++i) {
inq[i] = true, q.push(i);
}
while (q.size()) {
int u = q.front();
inq[u] = false, q.pop();
for (int i = 0; i < adj[u].size(); ++i) {
int v = adj[u][i].first;
int w = adj[u][i].second;
if (t[v] > t[u] + w) {
t[v] = t[u] + w;
if (!inq[v]) {
inq[v] = true, q.push(v);
}
}
}
}
int mint = t[0];
for (int i = 1; i < n; ++i) {
mint = min(mint, t[i]);
}
cout << mint << endl;
for (int i = 0; i < n; ++i) {
t[i] -= mint;
}
for (int i = 0; i < n; ++i) {
printf("%d ", t[i]);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IG1heG4gPSAyMDAwOwoKaW50IG4sIG07CnZlY3RvcjxwYWlyPGludCwgaW50Pj4gYWRqW21heG5dOwoKaW50IHRbbWF4bl07CnF1ZXVlPGludD4gcTsKYm9vbCBpbnFbbWF4bl07CgppbnQgbWFpbigpIHsKICBzY2FuZigiJWQlZCIsICZuLCAmbSk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpIHsKICAgIGludCB1LCB2LCB3OwogICAgc2NhbmYoIiVkJWQlZCIsICZ2LCAmdSwgJncpLCB1LS0sIHYtLTsKICAgIGFkalt1XS5wdXNoX2JhY2soe3YsIHd9KTsKICB9CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgIGlucVtpXSA9IHRydWUsIHEucHVzaChpKTsKICB9CiAgd2hpbGUgKHEuc2l6ZSgpKSB7CiAgICBpbnQgdSA9IHEuZnJvbnQoKTsKICAgIGlucVt1XSA9IGZhbHNlLCBxLnBvcCgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhZGpbdV0uc2l6ZSgpOyArK2kpIHsKICAgICAgaW50IHYgPSBhZGpbdV1baV0uZmlyc3Q7CiAgICAgIGludCB3ID0gYWRqW3VdW2ldLnNlY29uZDsKICAgICAgaWYgKHRbdl0gPiB0W3VdICsgdykgewogICAgICAgIHRbdl0gPSB0W3VdICsgdzsKICAgICAgICBpZiAoIWlucVt2XSkgewogICAgICAgICAgaW5xW3ZdID0gdHJ1ZSwgcS5wdXNoKHYpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBpbnQgbWludCA9IHRbMF07CiAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyArK2kpIHsKICAgIG1pbnQgPSBtaW4obWludCwgdFtpXSk7CiAgfQogIGNvdXQgPDwgbWludCA8PCBlbmRsOwogIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICB0W2ldIC09IG1pbnQ7CiAgfQogIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICBwcmludGYoIiVkICIsIHRbaV0pOwogIH0KICByZXR1cm4gMDsKfQ==