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());
}
}
}