from kata_201 import DSU

def kruskal_mst(n, edges):
    if n == 0:
        return (0, [])
    ordered = sorted(enumerate(edges), key=lambda item:
                     (item[1][2], item[1][0], item[1][1], item[0]))
    dsu, selected, total = DSU(n), [], 0
    for _, (u, v, weight) in ordered:
        if dsu.union(u, v):
            selected.append((u, v, weight))
            total += weight
            if len(selected) == n - 1:
                break
    return (total, selected) if len(selected) == n - 1 else None
