오류 정정
시간 제한1초메모리 제한128 MB
글자별 비트열 코드표와 이진 문자열이 주어질 때, 한 비트만 다른 부호화를 갖는 글자열이 정확히 하나인지 판별한다.
문제
앨리스와 밥은 암호학 교재에 단골로 등장하는 인물입니다. 두 사람은 암호화 알고리즘을 정하고 키를 교환한 뒤, 암호화된 메시지(이하 메시지)를 주어진 통신 선로로 어떻게 주고받을지 고민하고 있습니다. 메시지는 영어 소문자를 나열한 것입니다. 두 사람은 이진 부호를 쓰기로 하고, 각 글자마다 어떤 비트열을 배정했습니다. 이때 비트열의 길이를 서로 같게 맞추지도 않았고, 어떤 비트열도 다른 비트열의 접두사가 되지 않는다는 조건도 두지 않았습니다. 그래서 부호화된 메시지가 항상 유일하게 복호화되지는 않을 수 있습니다. 다만 서로 다른 글자에 배정된 비트열은 모두 서로 다르다는 점은 보장됩니다. 부호화된 메시지의 비트열은, 그 메시지의 각 글자에 대응하는 비트열을 순서대로 이어 붙인 것입니다.
당신의 과제는 앨리스와 밥을 위해, 받은 비트열을 복호화하는 프로그램을 작성하는 것입니다. 메시지 이 비트열 에 대응한다는 것은, 와 을 부호화한 비트열의 길이가 같고 서로 값이 다른 비트가 최대 하나(즉 많아야 한 자리에서만 값이 다름)인 경우를 뜻합니다. 어떤 비트열에 대응하는 메시지가 정확히 하나뿐이라면 그 메시지를 출력해야 합니다. 대응하는 메시지가 하나도 없거나 둘 이상이라면 그 사실을 알려야 합니다.
다음을 수행하는 프로그램을 작성하세요.
- 표준 입력에서 각 글자에 대응하는 비트열들과, 복호화할 비트열들을 읽어 들입니다.
- 각 비트열이 유일하게 복호화되는지 판정하고, 가능하다면 복호화합니다.
- 결과를 표준 출력에 출력합니다.
입력
첫 줄에는 사용되는 글자의 개수를 나타내는 정수 ()이 주어집니다. 이어지는 개의 줄에는 각각 영어 소문자 한 개, 공백 한 칸, 그리고 그 글자에 대응하는 비트열(0과 1로만 이루어지며 사이에 공백이 없음)이 주어집니다. 각 글자는 최대 한 번만 등장합니다. 비트열들의 길이 합은 150을 넘지 않습니다.
그다음 줄에는 복호화할 메시지의 개수를 나타내는 정수 ()이 주어집니다. 이어지는 개의 줄에는 각각 복호화할 메시지가 하나씩 주어집니다. 각 메시지는 사이에 공백이 없는 0과 1의 나열이며, 길이는 10000을 넘지 않습니다.
출력
각 메시지의 복호화 결과를 입력에 주어진 순서대로 표준 출력에 출력합니다.
- 주어진 비트열에 대응하는 메시지가 하나도 없으면, 한 줄에
BLAD를 출력합니다. - 대응하는 메시지가 둘 이상이면, 한 줄에
ZBYT WIELE를 출력합니다. - 대응하는 메시지가 정확히 하나뿐이면, 한 줄에
OK를 출력하고 그다음 줄에 복호화된 메시지를 출력합니다.