import java.io.*; import java.util.*; import java.math.BigInteger; public class Main { static class Edge { int u, v, w, index; public Edge(int u, int v, int w, int index) { this.u = u; this.v = v; this.w = w; this.index = index; } } static class UnionFind { int[] parent, rank; public UnionFind(int n) { parent = new int[n]; rank = new int[n]; for (int i = 0; i < n; i++) { parent[i] = i; rank[i] = 0; } } public int find(int x) { if (parent[x] != x) { parent[x] = find(parent[x]); } return parent[x]; } public boolean union(int x, int y) { int rootX = find(x); int rootY = find(y); if (rootX != rootY) { if (rank[rootX] > rank[rootY]) { parent[rootY] = rootX; } else if (rank[rootX] < rank[rootY]) { parent[rootX] = rootY; } else { parent[rootY] = rootX; rank[rootX]++; } return true; } return false; } } static void solve() { int n = in.nextInt(),m = in.nextInt(); List<Edge> edges = new ArrayList<>(); for (int i = 1; i <= m; i++) { int u = in.nextInt() - 1; int v = in.nextInt() - 1; int w = in.nextInt(); edges.add(new Edge(u, v, w, i)); } edges.sort(Comparator.comparingInt(a -> a.w)); UnionFind uf = new UnionFind(n); long mWeight = 0; List<Integer> mEdges = new ArrayList<>(); for (Edge edge : edges) { if (uf.union(edge.u, edge.v)) { mWeight += edge.w; mEdges.add(edge.index); if (mEdges.size() == n - 1) { break; } } } out.println(mWeight); for (int i = 0; i < mEdges.size(); i++) { out.print(mEdges.get(i) + " "); } } public static void main(String[] args) { solve(); out.flush(); } static FastReader in = new FastReader(); static PrintWriter out = new PrintWriter(System.out); static class FastReader { static BufferedReader br; static StringTokenizer st; FastReader() { br = new BufferedReader(new InputStreamReader(System.in)); } String next() { String str = ""; while (st == null || !st.hasMoreElements()) { try { str = br.readLine(); } catch (IOException e) { throw new RuntimeException(e); } st = new StringTokenizer(str); } return st.nextToken(); } int nextInt() { return Integer.parseInt(next()); } long nextLong() { return Long.parseLong(next()); } } }