Розгадуючи Код
Терористична організація, відома як NewWorld Ensemble for Rebellious Coders (NWERC), становить загрозу для нашого суспільства. На щастя, ми знайшли спосіб перехоплювати їхні комунікації, не даючи їм про це знати. Однак виникла проблема, оскільки їхні повідомлення зашифровані.
З розвідки відомо, що їхні повідомлення складаються лише з малих літер, а метод шифрування - це Basic Alphabet Permutation Code (BAPC). У цьому коді кожна однакова літера замінюється іншою (малою) літерою з алфавіту (або, можливо, тією ж самою літерою). Очевидно, що дві різні літери в оригінальному повідомленні залишаються різними після шифрування, так що існує унікальне дешифрування. Наприклад, "hello" може бути зашифровано як "ifmmp" або "holle", але не як "cnoiz" або "bgrrb".
Це залишає багато можливостей, і наші зусилля зламати код поки що були марними. На щастя, нам пощастило: через інформатора ми змогли отримати дешифроване повідомлення D. Ми не маємо відповідного зашифрованого повідомлення, але ми майже впевнені, що воно повинно бути десь у списку перехоплених зашифрованих повідомлень, які ми маємо.
Ваше завдання - написати програму, яка, отримавши оригінальне повідомлення D та список зашифрованих повідомлень, визначає, яка зашифрована літера відповідає якій дешифрованій літері (припускаючи, що одне з зашифрованих повідомлень відповідає оригінальному повідомленню), наскільки це можливо.
Це потім слід використовувати для дешифрування щойно перехопленого закодованого повідомлення X, наскільки це можливо. Зокрема, кожна літера X, для якої можна з абсолютною впевненістю визначити, що вона представляє - або безпосередньо, або дедуктивно - повинна бути дешифрована. Всі інші літери повинні бути замінені на знак питання.
Зверніть увагу, що навіть коли кілька повідомлень можуть відповідати D, все одно може бути можливо дешифрувати певні літери (див. наприклад третій тестовий випадок у зразку вводу).
Вхідні дані
На першому рядку одне позитивне число: кількість тестових випадків, не більше 100. Після цього для кожного тестового випадку:
один рядок з одним цілим числом n (1 ≤ n ≤ 100): кількість зашифрованих повідомлень.
n рядків з одним рядком M_i: зашифровані повідомлення.
один рядок з одним рядком D: дешифроване повідомлення, яке передбачається відповідати одному з зашифрованих повідомлень.
один рядок з одним рядком X: повідомлення, яке потрібно розшифрувати.
Усі рядки складаються щонайменше з 1 і не більше ніж з 1000 малих літер.
Вихідні дані
Для кожного тестового випадку:
один рядок з одним рядком Y. Для кожної літери в X відповідна літера в Y повинна бути дешифрованим аналогом, або '?', якщо вона невідома. Якщо немає зашифрованого повідомлення M_i, яке могло б бути зашифрованою версією D, то рядок повинен бути "IMPOSSIBLE" замість цього.