#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;
}
const int N = 2e5 + 5;
const int inf = 1e18;
int n, m, originS, originT, s, t, max_flow = 0;
struct edge{
int u, v, c, f, cost;
};
vector<int> D[N];
vector<edge> E;
void add_edge(int u, int v, int cap, int cost) {
D[u].push_back(E.size()); E.push_back({u, v, cap, 0, cost});
D[v].push_back(E.size()); E.push_back({v, u, 0, 0, -cost});
}
int dist[N], del[N], trace[N], cur_edge[N];
int min_cost;
int calc(int id) {
return E[id].cost + del[E[id].u] - del[E[id].v];
}
bool dijkstra() {
fill(dist + 1, dist + n + 1, inf);
fill(trace + 1, trace + n + 1, 0);
heapmin<pii> Q;
dist[s] = 0;
Q.push({dist[s], s});
while (!Q.empty()) {
int old = Q.top().ft, u = Q.top().sc;
Q.pop();
if (old != dist[u]) continue;
for (int id: D[u]) {
int v = E[id].v;
if (E[id].c > E[id].f && ckmin(dist[v], dist[u] + calc(id))) {
trace[v] = u;
Q.push({dist[v], v});
}
}
}
return dist[t] < inf;
}
int dfs(int u, int val) {
if (u == t) return val;
for (int &i = cur_edge[u]; i < D[u].size(); i++) {
int id = D[u][i];
int v = E[id].v;
if (trace[v] == u && E[id].c > E[id].f && dist[v] == dist[u] + calc(id)) {
int flow = dfs(v, min(val, E[id].c - E[id].f));
if (flow) {
E[id].f += flow;
E[id ^ 1].f -= flow;
min_cost += flow * E[id].cost;
return flow;
}
}
}
return 0;
}
bool vis[N * 10];
vector<pii> G[N];
void Find_Path(int u , int p){
cout << u << " ";
for (pii item: G[u]) {
int id = item.ft, v = item.sc;
if(vis[id] || v == p) continue;
vis[id] = 1;
Find_Path(v, u);
}
}
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, cost; cin >> u >> v >> cost;
add_edge(u, v, 1, cost);
add_edge(v, u, 1, cost);
}
originS = 1, originT = n;
n += 2;
s = n - 1; t = n;
add_edge(s, originS, 2, 0);
add_edge(originT, t, 2, 0);
while(dijkstra()) {
fill(cur_edge + 1, cur_edge + n + 1, 0);
for (int val = dfs(s, inf); val; val = dfs(s, inf)) max_flow += val;
for(int u = 1; u <= n; u++) if (dist[u] < inf) del[u] += dist[u];
}
if (max_flow != 2) return cout << -1, 0;
cout << min_cost << "\n";
for (int i = 0; i < E.size(); i += 2) if (E[i].u != s && E[i].v != t) {
if (E[i].f > 0 && E[i].cost > 0) {
int u = E[i].u, v = E[i].v;
G[u].push_back({i, v});
G[v].push_back({i, u});
}
}
Find_Path(1, 0);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IC8vIE5lT1dhbWkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKI2RlZmluZSBpbnQgbG9uZyBsb25nCnVzaW5nIHBpaSA9IHBhaXI8aW50LCBpbnQ+Owp0ZW1wbGF0ZTxjbGFzcyBUPiB1c2luZyBoZWFwbWluID0gcHJpb3JpdHlfcXVldWU8VCwgdmVjdG9yPFQ+LCBncmVhdGVyPFQ+PjsKYm9vbCBja21pbihpbnQgJnUsIGludCB2KSB7CiAgICBpZiAodSA+IHYpIHJldHVybiB1ID0gdiwgMTsKICAgIHJldHVybiAwOwp9CmNvbnN0IGludCBOID0gMmU1ICsgNTsKY29uc3QgaW50IGluZiA9IDFlMTg7CmludCBuLCBtLCBvcmlnaW5TLCBvcmlnaW5ULCBzLCB0LCBtYXhfZmxvdyA9IDA7CnN0cnVjdCBlZGdlewogICAgaW50IHUsIHYsIGMsIGYsIGNvc3Q7Cn07CnZlY3RvcjxpbnQ+IERbTl07CnZlY3RvcjxlZGdlPiBFOwp2b2lkIGFkZF9lZGdlKGludCB1LCBpbnQgdiwgaW50IGNhcCwgaW50IGNvc3QpIHsKICAgIERbdV0ucHVzaF9iYWNrKEUuc2l6ZSgpKTsgRS5wdXNoX2JhY2soe3UsIHYsIGNhcCwgMCwgY29zdH0pOwogICAgRFt2XS5wdXNoX2JhY2soRS5zaXplKCkpOyBFLnB1c2hfYmFjayh7diwgdSwgMCwgMCwgLWNvc3R9KTsKfQoKaW50IGRpc3RbTl0sIGRlbFtOXSwgdHJhY2VbTl0sIGN1cl9lZGdlW05dOwppbnQgbWluX2Nvc3Q7CmludCBjYWxjKGludCBpZCkgewogICAgcmV0dXJuIEVbaWRdLmNvc3QgKyBkZWxbRVtpZF0udV0gLSBkZWxbRVtpZF0udl07Cn0KYm9vbCBkaWprc3RyYSgpIHsKICAgIGZpbGwoZGlzdCArIDEsIGRpc3QgKyBuICsgMSwgaW5mKTsKICAgIGZpbGwodHJhY2UgKyAxLCB0cmFjZSArIG4gKyAxLCAwKTsKICAgIAogICAgaGVhcG1pbjxwaWk+IFE7CiAgICBkaXN0W3NdID0gMDsKICAgIFEucHVzaCh7ZGlzdFtzXSwgc30pOwoKICAgIHdoaWxlICghUS5lbXB0eSgpKSB7CiAgICAgICAgaW50IG9sZCA9IFEudG9wKCkuZnQsIHUgPSBRLnRvcCgpLnNjOwogICAgICAgIFEucG9wKCk7CiAgICAgICAgaWYgKG9sZCAhPSBkaXN0W3VdKSBjb250aW51ZTsKICAgICAgICBmb3IgKGludCBpZDogRFt1XSkgewogICAgICAgICAgICBpbnQgdiA9IEVbaWRdLnY7CiAgICAgICAgICAgIGlmIChFW2lkXS5jID4gRVtpZF0uZiAmJiBja21pbihkaXN0W3ZdLCBkaXN0W3VdICsgY2FsYyhpZCkpKSB7CiAgICAgICAgICAgICAgICB0cmFjZVt2XSA9IHU7CiAgICAgICAgICAgICAgICBRLnB1c2goe2Rpc3Rbdl0sIHZ9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBkaXN0W3RdIDwgaW5mOwp9CgppbnQgZGZzKGludCB1LCBpbnQgdmFsKSB7CiAgICBpZiAodSA9PSB0KSByZXR1cm4gdmFsOwogICAgZm9yIChpbnQgJmkgPSBjdXJfZWRnZVt1XTsgaSA8IERbdV0uc2l6ZSgpOyBpKyspIHsKICAgICAgICBpbnQgaWQgPSBEW3VdW2ldOwogICAgICAgIGludCB2ID0gRVtpZF0udjsKICAgICAgICBpZiAodHJhY2Vbdl0gPT0gdSAmJiBFW2lkXS5jID4gRVtpZF0uZiAmJiBkaXN0W3ZdID09IGRpc3RbdV0gKyBjYWxjKGlkKSkgewogICAgICAgICAgICBpbnQgZmxvdyA9IGRmcyh2LCBtaW4odmFsLCBFW2lkXS5jIC0gRVtpZF0uZikpOwogICAgICAgICAgICBpZiAoZmxvdykgewogICAgICAgICAgICAgICAgRVtpZF0uZiArPSBmbG93OwogICAgICAgICAgICAgICAgRVtpZCBeIDFdLmYgLT0gZmxvdzsKICAgICAgICAgICAgICAgIG1pbl9jb3N0ICs9IGZsb3cgKiBFW2lkXS5jb3N0OwogICAgICAgICAgICAgICAgcmV0dXJuIGZsb3c7CiAgICAgICAgICAgIH0gICAgICAgICAgICAKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQoKYm9vbCB2aXNbTiAqIDEwXTsKdmVjdG9yPHBpaT4gR1tOXTsKdm9pZCBGaW5kX1BhdGgoaW50IHUgLCBpbnQgcCl7CiAgICBjb3V0IDw8IHUgPDwgIiAiOwogICAgZm9yIChwaWkgaXRlbTogR1t1XSkgewogICAgICAgIGludCBpZCA9IGl0ZW0uZnQsIHYgPSBpdGVtLnNjOwogICAgICAgIGlmKHZpc1tpZF0gfHwgdiA9PSBwKSBjb250aW51ZTsgCiAgICAgICAgdmlzW2lkXSA9IDE7IAogICAgICAgIEZpbmRfUGF0aCh2LCB1KTsgCiAgICB9Cn0Kc2lnbmVkIG1haW4oKSB7CiAgICBjaW4udGllKE5VTEwpLT5zeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgaWYoaWZzdHJlYW0oIldBTEsuaW5wIikpIHsKICAgICAgICBmcmVvcGVuKCJXQUxLLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIldBTEsub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgY2luID4+IG4gPj4gbTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewogICAgICAgIGludCB1LCB2LCBjb3N0OyBjaW4gPj4gdSA+PiB2ID4+IGNvc3Q7CiAgICAgICAgYWRkX2VkZ2UodSwgdiwgMSwgY29zdCk7CiAgICAgICAgYWRkX2VkZ2UodiwgdSwgMSwgY29zdCk7CiAgICB9CiAgICBvcmlnaW5TID0gMSwgb3JpZ2luVCA9IG47CiAgICBuICs9IDI7CiAgICBzID0gbiAtIDE7IHQgPSBuOwogICAgYWRkX2VkZ2Uocywgb3JpZ2luUywgMiwgMCk7CiAgICBhZGRfZWRnZShvcmlnaW5ULCB0LCAyLCAwKTsKICAgIHdoaWxlKGRpamtzdHJhKCkpIHsKICAgICAgICBmaWxsKGN1cl9lZGdlICsgMSwgY3VyX2VkZ2UgKyBuICsgMSwgMCk7CiAgICAgICAgZm9yIChpbnQgdmFsID0gZGZzKHMsIGluZik7IHZhbDsgdmFsID0gZGZzKHMsIGluZikpIG1heF9mbG93ICs9IHZhbDsKICAgICAgICBmb3IoaW50IHUgPSAxOyB1IDw9IG47IHUrKykgaWYgKGRpc3RbdV0gPCBpbmYpIGRlbFt1XSArPSBkaXN0W3VdOwogICAgfQogICAgaWYgKG1heF9mbG93ICE9IDIpIHJldHVybiBjb3V0IDw8IC0xLCAwOwoKICAgIGNvdXQgPDwgbWluX2Nvc3QgPDwgIlxuIjsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBFLnNpemUoKTsgaSArPSAyKSBpZiAoRVtpXS51ICE9IHMgJiYgRVtpXS52ICE9IHQpIHsKICAgICAgICBpZiAoRVtpXS5mID4gMCAmJiBFW2ldLmNvc3QgPiAwKSB7CiAgICAgICAgICAgIGludCB1ID0gRVtpXS51LCB2ID0gRVtpXS52OwogICAgICAgICAgICBHW3VdLnB1c2hfYmFjayh7aSwgdn0pOwogICAgICAgICAgICBHW3ZdLnB1c2hfYmFjayh7aSwgdX0pOwogICAgICAgIH0KICAgIH0KICAgIEZpbmRfUGF0aCgxLCAwKTsKICAgIHJldHVybiAwOwp9Cg==