#include <bits/stdc++.h>
using namespace std;

int main() {
    priority_queue<tuple<int, int, int>, vector<tuple<int, int, int>>, greater<tuple<int, int, int>>> pq;
    int n, m;
    cin >> n >> m;
    vector<vector<tuple<int, int, int>>> graph(n + 1);
    for (int i = 0; i < m; i++) {
        int u, v, w;
        cin >> u >> v >> w;
        graph[u].emplace_back(v, w, i + 1);
        graph[v].emplace_back(u, w, i + 1);
    }
    for (auto [v, w, i] : graph[1]) {
        pq.push({w, v, i});
    }
    vector<int> vis(n + 1, 0);
    vis[1] = 1;
    long long ans = 0;
    vector<int> path;
    while (!pq.empty()) {
        auto[w, v, i] = pq.top();
        pq.pop();
        if (vis[v]) continue;
        vis[v] = 1;
        path.push_back(i);
        ans += w;
        for (auto[v, w, i] : graph[v]) {
            pq.push({w, v, i});
        }
    }
    cout << ans << '\n';
    for (int i = 0; i < path.size(); i++) {
        cout << path[i] << ' ';
    }
    return 0;
}
// 64 位输出请用 printf("%lld")