문제
준형이는 다소 특이한 암호를 만들었다. 준형이의 암호는 0~9의 숫자 K개로 구성된 비밀키를 갖 고 있다. 이 비밀키를 구성하는 숫자들은 비내림차순으로 정렬되어 있다. 예를 들어, K=5인 경우 비밀키 로 가능한 예로는 “01248”, “12345”, “00122” 등이 있다.
준형이의 암호로는 0 이상 2^K 미만의 숫자를 암호화하여 다른 숫자로 만들 수 있다. 우선 준형이는 암호화하려는 수를 2진수로 바꾸어 K개의 숫자로 나타낸다. 그런 후 준형이는 비밀키에서 K개의 숫자들 중 1에 대응되는 수들을 모두 찾아서 더한다. 이 방식을 통해서 나온 숫자가 곧 암호가 된다.
예를 들어, 준형이가 ‘01236’이라는 비밀키를 이용하여 숫자 5를 암호화한다면, 숫자 5를 이진수로 바꾸면 ‘00101’이기 때문에 암호화한 수는 2 + 6 = 8이 된다.
준형이는 특정 수를 암호화해서 숫자 Z를 얻었다. 준형이는 이 수를 다시 복호화하려는데 복호화하는 것은 생각보다 까다로웠다. 준형이를 도와 Z를 복호화하는 프로그램을 작성하여라.
입력
첫 번째 줄에 K가 주어진다. (1 ≤ K ≤ 50)
두 번째 줄에는 비밀키가 주어진다.
세 번째 줄에는 Z가 주어진다. (0 ≤ Z ≤ 450)
출력
첫 번째 줄에 원래 수를 이진수로 출력한다. 이 때 앞에 0을 몇 개 출력하여 정확히 K자리를 맞추도 록 한다.
답이 여러 개 있는 경우 아무거나 출력한다. 답은 항상 존재한다고 가정해도 좋다.
예제 #1
5
01247
5
01010
예제 #2
6
001234
6
100101
예제 #3
11
01234567889
40
00100011111
출처
Junior Croatian OI Task 1 SIFRAT 변형