### accountsMerge 
from collections import defaultdict
from typing import *
def f_gold(accounts: List[List[str]]) -> List[List[str]]:
    def find(x):
        if p[x] != x:
            p[x] = find(p[x])
        return p[x]
    n = len(accounts)
    p = list(range(n))
    email_id = {}
    for i, account in enumerate(accounts):
        name = account[0]
        for email in account[1:]:
            if email in email_id:
                p[find(i)] = find(email_id[email])
            else:
                email_id[email] = i
    mp = defaultdict(set)
    for i, account in enumerate(accounts):
        for email in account[1:]:
            mp[find(i)].add(email)
    ans = []
    for i, emails in mp.items():
        t = [accounts[i][0]]
        t.extend(sorted(emails))
        ans.append(t)
    return ans