테러 조직 NWERC(New World Ensemble for Rebellious Coders)가 우리 사회를 위협하고 있다. 다행히 우리는 들키지 않고 그들의 통신을 가로채는 방법을 알아냈다. 문제는 그 통신이 전부 암호화되어 있다는 점이다.
정보원이 알아낸 사실은 두 가지다. 그들의 메시지는 알파벳 소문자로만 이루어져 있고, 암호화 방식은 BAPC(Basic Alphabet Permutation Code), 즉 일대일 치환이다. 같은 알파벳은 언제나 같은 문자 하나로 바뀌며, 그 문자는 원래 알파벳과 같아도 된다. 암호화 전에 서로 달랐던 두 문자는 암호화 후에도 반드시 서로 다른 문자로 나타난다. 예를 들어 "hello"는 "ifmmp"나 "holle"로 암호화될 수 있지만, "cnoiz"나 "bgrrb"로는 암호화될 수 없다.
이 사실만으로는 경우의 수가 너무 많아서 해독 시도는 번번이 실패했다. 그러던 중 정보원이 평문 한 문장을 손에 넣었다. 이 평문은 우리가 초창기부터 모아 온 암호문 중 정확히 하나에 대응할 가능성이 아주 높다.
평문 한 문장과 암호문 목록이 주어진다. 이 자료로 a부터 z까지 26개 알파벳의 치환표를 알아낼 수 있는 데까지 알아낸 다음, 최근에 가로챈 통신문 X를 해독할 수 있는 만큼 해독해서 출력하는 것이 당신의 임무다.
X의 어떤 글자의 해독 결과가 하나로 확정되면 그 문자를 출력해야 한다. 서로 다른 두 문자 이상으로 모순 없이 해독될 수 있으면 그 자리에 '?'를 출력한다.
목록에서 평문에 대응하는 암호문이 둘 이상이면 어느 암호문으로 치환표를 만들어야 할지 알 수 없다. 이때도 일부 문자는 여전히 하나로 확정될 수 있으니 주의하라.
첫 줄에 테스트 케이스의 수 T가 주어진다. (T≤100)
각 테스트 케이스는 다음과 같이 구성된다.
모든 문자열은 길이가 1 이상 1000 이하이고 알파벳 소문자로만 이루어져 있다.
각 테스트 케이스마다 X의 해독 결과를 한 줄에 출력한다.
하나로 확정되는 문자는 해독된 문자를, 확정되지 않는 문자는 '?'를 출력한다. 평문에 대응하는 암호문이 목록에 하나도 없으면 해독 결과 대신 "IMPOSSIBLE"을 출력한다.