#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int f(vector& a, vector& u, vector& v, vector& w) { int N = a.size(), M = u.size(), score = 0; for (int j = 0; j < M; j++) if (a[u[j]] < a[v[j]]) score += w[j]; return score; } int main() { int N, M; cin >> N >> M; vector u(M), v(M), w(M); for (int j = 0; j < M; j++) cin >> u[j] >> v[j] >> w[j]; vector a(N); for (int i = 0; i < N; i++) a[i] = i; random_device rd; mt19937 mt(rd()); int score = f(a, u, v, w); for (int t = 0; t < 1000000; t++) { int i = mt() % N, j = mt() % N; swap(a[i], a[j]); int _score = f(a, u, v, w); if (_score > score) score = _score; else swap(a[i], a[j]); } vector b(N); for (int i = 0; i < N; i++) b[a[i]] = i; cout << score << endl; for (int i = 0; i < N; i++) cout << b[i] << ' '; cout << endl; }