#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int n; int m; #define MAX 51 vector > > v; vector ans; int maxt = 0; vector ord; int flag[MAX]; void score(){ for (int i = 0; i < ord.size(); i++){ flag[ord[i]] = i; } int kari = 0; for (int i = 0; i < v.size(); i++){ if (flag[v[i].first] < flag[v[i].second.first]){ kari += v[i].second.second; } } if (maxt < kari){ maxt = kari; ans = ord; } } int main(){ scanf("%d%d", &n, &m); for (int i = 0; i < m; i++){ int a, b, c; scanf("%d%d%d", &a, &b, &c); v.push_back(make_pair(a, make_pair(b, c))); } for (int i = 0; i < n; i++){ ord.push_back(i); } maxt = -1; score(); reverse(ord.begin(), ord.end()); score(); reverse(ord.begin(), ord.end()); double st = clock(); while ((clock()-st) / (double)(CLOCKS_PER_SEC) < 4.5){ random_shuffle(ord.begin(), ord.end()); score(); } printf("%d\n", maxt); for (int i = 0; i < ans.size(); i++){ if (i){ cout << " "; } cout << ans[i]; } puts(""); return 0; }