바이킹 암호 서브태스크 1초 32MB
문제
바이킹들이 훌륭한 전사라는 사실은 다들 들어본적이 있을 것입니다. 그러나 바이킹이 훌륭한 프로그래머라는 사실도 알고 있었나요?
물론 그들은 기술력이 부족하여 고급 프로그래밍 언어가 아닌 0과 1로만 이루어진 코드를 작성해야만 했습니다.
바이킹들에게 있어서 물리적인 전쟁 못지않게 정보전도 아주 중요했기에 그들은 해킹을 막기위해 특수한 암호시스템을 개발했습니다.
당신은 바이킹들의 코드를 해킹하기 위한 중요한 임무를 부여받았습니다.
우리의 엘리트 스파이 에이전트KOI가 그들의 암호집을 훔쳐왔기에 이를 바탕으로 주어진 코드를 해석하면 됩니다.
바이킹의 코드는 4의 배수에 해당하는 길이로 작성이 되며, 암호집은 문자와 이에 상응하는 네 자리 이진코드로 이루어져 있습니다.
입력
첫 번째 줄에 암호집의 길이 T가 입력됩니다. (1 ≤ T ≤ 16)
두 번째 줄부터 T줄에 걸쳐 숫자 또는 소문자 알파벳으로 이루어진 한 자리 문자 X과 해당 문자 X의 암호화된 네 자리 이진 코드 Y가 공백을 기준으로 나뉘어 입력됩니다. 이진 코드 Y는 X로 해석하면 된다는 의미이며, Y는 중복되지 않습니다.
마지막 줄에 해석을 해야하는 길이 N의 이진코드가 입력됩니다. (1 ≤ N ≤ 4000, N은 4의 배수)
출력
주어진 길이 N의 이진코드를 암호집을 바탕으로 해석하여 출력하시오. 암호집에 없는 부분은 '?'로 출력하면 된다.
부분문제
| 번호 | 점수 | 조건 |
|---|---|---|
| #1 | 30점 | N ≤ 40 |
| #2 | 30점 | 모든 이진코드 조각이 암호문에 있음 |
| #3 | 40점 | 추가 제한 없음 |
예제 #1
2
a 0100
b 1000
0100100000101000
ab?b
이진코드 "0100100000101000"를 길이 4의 조각으로 분해하면 [0100, 1000, 0010, 1000]로 분리된다.
암호집에 따르면 0100은 'a'이고, 1000은 'b'이므로 순서대로 ['a', 'b', '?', 'b']가 된다.
예제 #2
6
2 0101
P 1101
1 1010
4 1011
O 1110
0 0010
110111110101010010101011
P?2?14