#include <bits/stdc++.h> // NeOWami
using namespace std;
#define ft first
#define sc second
#define int long long
using pii = pair<int, int>;
template<class T> using heapmin = priority_queue<T, vector<T>, greater<T>>;
bool ckmin(int &u, int v) {
if (u > v) return u = v, 1;
return 0;
}
void doing(int a) {
a = 2;
cout << a;
}
const int N = 2e5 + 5;
const int inf = 1e18;
using pii = pair<int, int>;
int n, m, ans = inf;
struct Edge {
int v, w, id;
};
vector<Edge> G[N];
bool on[N];
vector<int> path, ansPath;
void Try(int u, int type, int sum) {
// cerr << u << " " << type << " " << sum << "\n";
if (type == 1 && u == n) type = 2;
if (type == 2 && u == 1) {
if (ckmin(ans, sum)) ansPath = path;
return;
}
for (Edge item: G[u]) {
if (on[item.id] == 0) {
on[item.id] = 1;
path.push_back(item.v);
Try(item.v, type, sum + item.w);
on[item.id] = 0;
path.pop_back();
}
}
}
signed main() {
cin.tie(NULL)->sync_with_stdio(false);
if(ifstream("WALK.inp")) {
freopen("WALK.inp", "r", stdin);
freopen("WALK.out", "w", stdout);
}
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
G[u].push_back({v, w, i});
G[v].push_back({u, w, i});
}
path = {1};
Try(1, 1, 0);
if (ans == inf) cout << -1;
else {
cout << ans << "\n";
for (int item: ansPath) cout << item << " ";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IC8vIE5lT1dhbWkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKI2RlZmluZSBpbnQgbG9uZyBsb25nCnVzaW5nIHBpaSA9IHBhaXI8aW50LCBpbnQ+Owp0ZW1wbGF0ZTxjbGFzcyBUPiB1c2luZyBoZWFwbWluID0gcHJpb3JpdHlfcXVldWU8VCwgdmVjdG9yPFQ+LCBncmVhdGVyPFQ+PjsKYm9vbCBja21pbihpbnQgJnUsIGludCB2KSB7CiAgICBpZiAodSA+IHYpIHJldHVybiB1ID0gdiwgMTsKICAgIHJldHVybiAwOwp9Cgp2b2lkIGRvaW5nKGludCBhKSB7CiAgICBhID0gMjsKICAgIGNvdXQgPDwgYTsKfQoKCmNvbnN0IGludCBOID0gMmU1ICsgNTsKY29uc3QgaW50IGluZiA9IDFlMTg7CnVzaW5nIHBpaSA9IHBhaXI8aW50LCBpbnQ+OwppbnQgbiwgbSwgYW5zID0gaW5mOwoKc3RydWN0IEVkZ2UgewogICAgaW50IHYsIHcsIGlkOwp9Owp2ZWN0b3I8RWRnZT4gR1tOXTsKCgpib29sIG9uW05dOwp2ZWN0b3I8aW50PiBwYXRoLCBhbnNQYXRoOwoKdm9pZCBUcnkoaW50IHUsIGludCB0eXBlLCBpbnQgc3VtKSB7CiAgICAvLyBjZXJyIDw8IHUgPDwgIiAiIDw8IHR5cGUgPDwgIiAiIDw8IHN1bSA8PCAiXG4iOwogICAgaWYgKHR5cGUgPT0gMSAmJiB1ID09IG4pIHR5cGUgPSAyOwogICAgaWYgKHR5cGUgPT0gMiAmJiB1ID09IDEpIHsKICAgICAgICBpZiAoY2ttaW4oYW5zLCBzdW0pKSBhbnNQYXRoID0gcGF0aDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZm9yIChFZGdlIGl0ZW06IEdbdV0pIHsKICAgICAgICBpZiAob25baXRlbS5pZF0gPT0gMCkgewogICAgICAgICAgICBvbltpdGVtLmlkXSA9IDE7CiAgICAgICAgICAgIHBhdGgucHVzaF9iYWNrKGl0ZW0udik7CiAgICAgICAgICAgIFRyeShpdGVtLnYsIHR5cGUsIHN1bSArIGl0ZW0udyk7CiAgICAgICAgICAgIG9uW2l0ZW0uaWRdID0gMDsKICAgICAgICAgICAgcGF0aC5wb3BfYmFjaygpOwoKICAgICAgICB9CiAgICB9Cn0KCgpzaWduZWQgbWFpbigpIHsKICAgIGNpbi50aWUoTlVMTCktPnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBpZihpZnN0cmVhbSgiV0FMSy5pbnAiKSkgewogICAgICAgIGZyZW9wZW4oIldBTEsuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiV0FMSy5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBjaW4gPj4gbiA+PiBtOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgaW50IHUsIHYsIHc7CiAgICAgICAgY2luID4+IHUgPj4gdiA+PiB3OwogICAgICAgIEdbdV0ucHVzaF9iYWNrKHt2LCB3LCBpfSk7CiAgICAgICAgR1t2XS5wdXNoX2JhY2soe3UsIHcsIGl9KTsKICAgIH0KICAgIHBhdGggPSB7MX07CiAgICBUcnkoMSwgMSwgMCk7CiAgICBpZiAoYW5zID09IGluZikgY291dCA8PCAtMTsKICAgIGVsc2UgewogICAgICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7CiAgICAgICAgZm9yIChpbnQgaXRlbTogYW5zUGF0aCkgY291dCA8PCBpdGVtIDw8ICIgIjsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==