Члени оргкомітету конкурсу з програмування у Кітошімі вирішили використовувати криптографічне програмне забезпечення для своїх секретних повідомлень. Вони попросили компанію Kodai Software розробити для цього криптографічне програмне забезпечення, яке повинно використовувати дуже складний математичний шифр.
За результатами звітів щодо ІТ-проєктів, багато з них не виконувались вчасно, у межах бюджету чи із необхідним функціоналом. Так було і цього разу: компанія Kodai Software не змогла своєчасно розробити складний шифр, тому запропонувала тимчасово використати простіший шифр — підстановку. Хоча оргкомітет був незадоволений, але погодився використати тимчасово менш захищене рішення, наполягаючи на повній реалізації функціоналу згодом.
Надалі текст до шифрування називатимемо відкритим текстом, а після шифрування — шифротекстом.
У шифрі підстановки кожну літеру замінюють згідно з правилами, які задаються набором невпорядкованих пар літер. Порядок у парі не має значення, тобто пара рівноцінна парі . Кожна літера може входити не більш як до однієї пари. Якщо у слові є літера з такої пари, її замінюють на іншу з цієї пари. Літери, які не належать жодній парі, залишаються без змін.
Наприклад,ABCDEFGHIJKLMNOPQRSTUVWXYZ
За правилом \{ (A, Z), (B, Y) \} отримаємо
ZYCDEFGHIJKLMNOPQRSTUVWXBA
Це може бути нашою перевагою, оскільки правила підстановки виглядають доволі слабкими. Може виявитися можливим отримати відомості про зв'язки між членами оргкомітету. Ваше завдання — написати програму, яка знаходить відкритий текст повідомлення за шифротекстом.
Шифротекст складається з одного або кількох слів. Для кожного слова існує список можливих варіантів — це всі слова, які можуть бути у відкритому тексті (жодних інших слів бути не може). Деякі зі слів зі списку можуть не використовуватись.
Гарантується, що існує принаймні одна послідовність слів-кандидатів, з якої заданий шифротекст можна отримати певним правилом підстановки. Водночас, інколи буває неможливо однозначно встановити відкритий текст, маючи лише шифротекст та перелік слів-кандидатів.
Кожна задача містить кілька наборів даних. Формат одного набору:
n word_1 word_2 word_n sequence
Перше число — кількість слів-кандидатів. Далі у рядках — ці слова. Останній рядок — послідовність із одного або кількох зашифрованих слів, розділених пробілом і завершена крапкою.
Довжина послідовності більше і не перевищує (разом із пробілами і крапкою). Список містить не більш як слів. Використовуються тільки латинські літери –. Довжина кожного слова — від до .
Рядок, що складається з однієї цифри , означає кінець введення.
Для кожного набору в окремому рядку виведіть розшифроване повідомлення. Сусідні слова відокремлюйте одним пробілом, останнє слово завершуйте крапкою.
Якщо однозначно встановити відкритий текст неможливо, виведіть лише рядок "-.".
Приклад 1