암호 깨기

아직 제출이 없습니다시간 제한2초메모리 제한128 MB

문제

테러 조직 NWERC(New World Ensemble for Rebellious Coders)가 우리 사회를 위협하고 있다. 다행히 우리는 들키지 않고 그들의 통신을 가로채는 방법을 알아냈다. 문제는 그 통신이 전부 암호화되어 있다는 점이다.

정보원이 알아낸 사실은 두 가지다. 그들의 메시지는 알파벳 소문자로만 이루어져 있고, 암호화 방식은 BAPC(Basic Alphabet Permutation Code), 즉 일대일 치환이다. 같은 알파벳은 언제나 같은 문자 하나로 바뀌며, 그 문자는 원래 알파벳과 같아도 된다. 암호화 전에 서로 달랐던 두 문자는 암호화 후에도 반드시 서로 다른 문자로 나타난다. 예를 들어 "hello"는 "ifmmp"나 "holle"로 암호화될 수 있지만, "cnoiz"나 "bgrrb"로는 암호화될 수 없다.

이 사실만으로는 경우의 수가 너무 많아서 해독 시도는 번번이 실패했다. 그러던 중 정보원이 평문 한 문장을 손에 넣었다. 이 평문은 우리가 초창기부터 모아 온 암호문 중 정확히 하나에 대응할 가능성이 아주 높다.

평문 한 문장과 암호문 목록이 주어진다. 이 자료로 a부터 z까지 26개 알파벳의 치환표를 알아낼 수 있는 데까지 알아낸 다음, 최근에 가로챈 통신문 XX를 해독할 수 있는 만큼 해독해서 출력하는 것이 당신의 임무다.

XX의 어떤 글자의 해독 결과가 하나로 확정되면 그 문자를 출력해야 한다. 서로 다른 두 문자 이상으로 모순 없이 해독될 수 있으면 그 자리에 '?'를 출력한다.

목록에서 평문에 대응하는 암호문이 둘 이상이면 어느 암호문으로 치환표를 만들어야 할지 알 수 없다. 이때도 일부 문자는 여전히 하나로 확정될 수 있으니 주의하라.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. (T100T \le 100)

각 테스트 케이스는 다음과 같이 구성된다.

  • 정수 NN (1N1001 \le N \le 100): 암호문의 개수
  • 이어지는 NN개의 줄: 암호문
  • 다음 한 줄: 평문
  • 다음 한 줄: 해독하려는 통신문 XX

모든 문자열은 길이가 1 이상 1000 이하이고 알파벳 소문자로만 이루어져 있다.

출력

각 테스트 케이스마다 XX의 해독 결과를 한 줄에 출력한다.

하나로 확정되는 문자는 해독된 문자를, 확정되지 않는 문자는 '?'를 출력한다. 평문에 대응하는 암호문이 목록에 하나도 없으면 해독 결과 대신 "IMPOSSIBLE"을 출력한다.