### alienOrder 
from collections import deque
from typing import *
def f_gold(words: List[str]) -> str:
    g = [[False] * 26 for _ in range(26)]
    s = [False] * 26
    cnt = 0
    n = len(words)
    for i in range(n - 1):
        for c in words[i]:
            if cnt == 26:
                break
            o = ord(c) - ord('a')
            if not s[o]:
                cnt += 1
                s[o] = True
        m = len(words[i])
        for j in range(m):
            if j >= len(words[i + 1]):
                return ''
            c1, c2 = words[i][j], words[i + 1][j]
            if c1 == c2:
                continue
            o1, o2 = ord(c1) - ord('a'), ord(c2) - ord('a')
            if g[o2][o1]:
                return ''
            g[o1][o2] = True
            break
    for c in words[n - 1]:
        if cnt == 26:
            break
        o = ord(c) - ord('a')
        if not s[o]:
            cnt += 1
            s[o] = True
    indegree = [0] * 26
    for i in range(26):
        for j in range(26):
            if i != j and s[i] and s[j] and g[i][j]:
                indegree[j] += 1
    q = deque()
    ans = []
    for i in range(26):
        if s[i] and indegree[i] == 0:
            q.append(i)
    while q:
        t = q.popleft()
        ans.append(chr(t + ord('a')))
        for i in range(26):
            if s[i] and i != t and g[t][i]:
                indegree[i] -= 1
                if indegree[i] == 0:
                    q.append(i)
    return '' if len(ans) < cnt else ''.join(ans)