from collections import defaultdict
from kata_201 import DSU

def merge_accounts(accounts):
    dsu, owner = DSU(len(accounts)), {}
    for i, account in enumerate(accounts):
        for email in account[1:]:
            if email in owner:
                dsu.union(i, owner[email])
            else:
                owner[email] = i
    groups = defaultdict(list)
    for email, i in owner.items():
        groups[dsu.find(i)].append(email)
    return sorted([accounts[root][0]] + sorted(emails)
                  for root, emails in groups.items())
