from collections import Counter
mixed_word = input()
n = int(input())
words = [input() for _ in range(n)]
mixed_count = Counter(mixed_word)
mixed_len = len(mixed_word)
result = []
def solve(current_words, current_len):
if current_len == mixed_len:
counts = Counter("".join(current_words))
if counts == mixed_count:
result.extend(sorted(current_words))
return
if current_len > mixed_len:
return
for word in words:
if word not in current_words:
solve(current_words + [word], current_len + len(word))
solve([], 0)
for word in sorted(list(set(result))):
print(word)
Но у Вити плохо получается, а Маша уже забыла какие слова она выбрала. Нужно им помочь — написать программу, которая восстановит слова, которые были выбраны Машей.
Формат ввода
В первой строке находится строка, которую Маша предложила Вите. Во второй строке содержится число n — количество слов, которые нужно выучить детям, 20 ≤ n ≤ 100.
В следующих n строках содержатся эти слова по одному в строке. Все слова в этом наборе различны. Слова отсортированы в лексикографическом (алфавитном) порядке. Все слова состоят из маленьких букв от 'a' до 'z'. Обратите внимание, что в тестах к этой задаче все заданные слова реально существуют в английском языке и случайным образом выбраны из словаря.
Гарантируется, что длина каждого слова из предложенного набора (словаря) в пределах от 5 до 8, строка, которую получила Маша может быть получена путем перестановки букв некоторых различных слов из предложенного словаря, причем набор выбранных Машей слов определяется по ней однозначно. Количество слов, из которых составлена Машина строка находится в пределах от 5 до 8.
Формат вывода
Вывести все слова, выбранные Машей, в алфавитном порядке по одному в строке.
Пример
Ввод Вывод
stirbaexsudueoeidgomttcrnrwlunapntetacwri
24
bridge
cranky
document
drawing
farmer
fighter
figurine
gravy
havoc
minimum
reactant
reply
republic
sonata
soprano
split
subset
tailor
texture
tomorrow
trout
vicinity
wrist
writer
document
drawing
republic
sonata
texture
wrist