import re

words = []
with open("english-words.txt", "r") as f:
    for line in f.readlines():
        line = line.strip()
        if not line.isalpha(): continue

        words.append(line)

def find_word_by_letters(letters):
    pattern = ""
    for possibilities in letters:
        if len(possibilities) == 0:
            pattern += "."
        elif len(possibilities) == 0:
            pattern += possibilities[0]
        else:
            pattern += "["
            pattern += "".join(possibilities)
            pattern += "]"

    compiled_pattern = re.compile("^" + pattern + "$")

    found_words = []
    for word in words:
        if compiled_pattern.match(word.upper()):
            found_words.append(word)

    return found_words


letters = [
    ["P"],
    ["L"],
    [],
    ["K", "I", "C", "A"],
    ["Z", "O", "N", "K", "J"],
    ["O", "M", "G", "E"],
    ["Z", "Y", "X", "W", "V", "U", "T", "S", "R", "Q", "P"],
    ["Y", "U", "Q", "M", "I", "E"],
    ["E"],
    ["D"]
]

banned_words = [
    "zeed",
    "PL",
    "PLA",
    "PLT",
    "PLP",
    "plf",
    "PLC",
    "plu",
    "PLR",
    "pltano",
    "ed",
    "MED",
    "yed",
    "QED",
    "PLD",
    "Ppli",
    "ply",
    "PLL",
    "PLM",
    "pli",
    "PLO",
    "PLS",
    "PLCC",
    "SED",
    "CED"
]

for split_index in range(1, len(letters)-1):
    possible_words1 = find_word_by_letters(letters[:split_index])
    if len(possible_words1) == 0: continue

    possible_words2 = find_word_by_letters(letters[split_index:])
    if len(possible_words2) == 0: continue

    for word1 in possible_words1:
        if word1 in banned_words: continue

        for word2 in possible_words2:
            if word2 in banned_words: continue
            print(f"{word1} {word2}")