def find(parent, i):
    if parent[i] == i:
        return i
    return find(parent, parent[i])


def union(parent, x, y):
    parent[find(parent, x)] = find(parent, y)


def MST_Kruskal(V, E):
    A = []
    parent = {}

    for v in V:
        parent[v] = v

    E.sort(key=lambda x: x[2])

    for u, v, w in E:
        if find(parent, u) != find(parent, v):
            A.append((u, v, w))
            union(parent, u, v)

    return A


# Example
V = [0, 1, 2, 3]
E = [(0, 1, 10), (0, 2, 6), (0, 3, 5), (1, 3, 15), (2, 3, 4)]

print(MST_Kruskal(V, E))