#include<bits/stdc++.h>
using namespace std;
const int Nmax = 2e6 + 7;
const int MOD = 1000000007;
int numnode, numedge;
vector<pair<int, int>> adj[Nmax];
long long dp[23][Nmax];
pair<int, int> trace[23][Nmax];
void in(){
memset(dp, -1, sizeof(dp));
cin >> numnode >> numedge;
for(int i = 1; i <= numedge; i++){
int u, v, c;
cin >> u >> v >> c;
adj[u].push_back({c, v});
}
}
long long calc(int u, int choose){
if(choose == (1 << numnode) - 1){
long long res = 2e18;
for(auto e : adj[u]){
int c = e.first, v = e.second;
if(v == 1){
res = min(res, 0ll + c);
}
} return res;
}
long long &res = dp[u][choose];
if(res != -1) return res;
res = 1e18;
for(auto e : adj[u]){
int c = e.first, v = e.second;
if(!((choose >> (v - 1)) & 1)) {
if(res > 0ll + c + calc(v, choose + (1 << (v - 1)))){
res = 0ll + c + calc(v, choose + (1 << (v - 1)));
trace[u][choose] = {v, choose + (1 << (v - 1))};
}
}
}
return res;
}
void sol(){
cout << calc(1, 1);
cout << '\n';
pair<int, int> t = {1, 1};
while(1){
cout << t.first << ' ';
t = trace[t.first][t.second];
if(t.second == 0) break;
}
}
int main(){
freopen("TSP.inp", "r", stdin);
freopen("TSP.out", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(0);
int t = 1;
//cin >> t;
while(t--){
in();
sol();
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBObWF4ID0gMmU2ICsgNzsKY29uc3QgaW50IE1PRCA9IDEwMDAwMDAwMDc7CgppbnQgbnVtbm9kZSwgbnVtZWRnZTsKdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBhZGpbTm1heF07CmxvbmcgbG9uZyBkcFsyM11bTm1heF07CnBhaXI8aW50LCBpbnQ+IHRyYWNlWzIzXVtObWF4XTsKdm9pZCBpbigpewogICAgbWVtc2V0KGRwLCAtMSwgc2l6ZW9mKGRwKSk7CiAgICBjaW4gPj4gbnVtbm9kZSA+PiBudW1lZGdlOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBudW1lZGdlOyBpKyspewogICAgICAgIGludCB1LCB2LCBjOwogICAgICAgIGNpbiA+PiB1ID4+IHYgPj4gYzsKICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKHtjLCB2fSk7CiAgICB9Cn0KbG9uZyBsb25nIGNhbGMoaW50IHUsIGludCBjaG9vc2UpewogICAgaWYoY2hvb3NlID09ICgxIDw8IG51bW5vZGUpIC0gMSl7CiAgICAgICAgbG9uZyBsb25nIHJlcyA9IDJlMTg7CiAgICAgICAgZm9yKGF1dG8gZSA6IGFkalt1XSl7CiAgICAgICAgICAgIGludCBjID0gZS5maXJzdCwgdiA9IGUuc2Vjb25kOwogICAgICAgICAgICBpZih2ID09IDEpewogICAgICAgICAgICAgICAgcmVzID0gbWluKHJlcywgMGxsICsgYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9IHJldHVybiByZXM7CiAgICB9CiAgICBsb25nIGxvbmcgJnJlcyA9IGRwW3VdW2Nob29zZV07CiAgICBpZihyZXMgIT0gLTEpIHJldHVybiByZXM7CiAgICByZXMgPSAxZTE4OwogICAgZm9yKGF1dG8gZSA6IGFkalt1XSl7CiAgICAgICAgaW50IGMgPSBlLmZpcnN0LCB2ID0gZS5zZWNvbmQ7CiAgICAgICAgaWYoISgoY2hvb3NlID4+ICh2IC0gMSkpICYgMSkpIHsKICAgICAgICAgICAgaWYocmVzID4gMGxsICsgYyArIGNhbGModiwgY2hvb3NlICsgKDEgPDwgKHYgLSAxKSkpKXsKICAgICAgICAgICAgICAgIHJlcyA9IDBsbCArIGMgKyBjYWxjKHYsIGNob29zZSArICgxIDw8ICh2IC0gMSkpKTsKICAgICAgICAgICAgICAgIHRyYWNlW3VdW2Nob29zZV0gPSB7diwgY2hvb3NlICsgKDEgPDwgKHYgLSAxKSl9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlczsKfQp2b2lkIHNvbCgpewogICAgY291dCA8PCBjYWxjKDEsIDEpOwogICAgY291dCA8PCAnXG4nOwogICAgcGFpcjxpbnQsIGludD4gdCA9IHsxLCAxfTsKICAgIHdoaWxlKDEpewogICAgICAgIGNvdXQgPDwgdC5maXJzdCA8PCAnICc7CiAgICAgICAgdCA9IHRyYWNlW3QuZmlyc3RdW3Quc2Vjb25kXTsKICAgICAgICBpZih0LnNlY29uZCA9PSAwKSBicmVhazsKICAgIH0KfQppbnQgbWFpbigpewogICAgZnJlb3BlbigiVFNQLmlucCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3BlbigiVFNQLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsKICAgIGludCB0ID0gMTsKICAgIC8vY2luID4+IHQ7CiAgICB3aGlsZSh0LS0pewogICAgICAgaW4oKTsKICAgICAgIHNvbCgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=