Walaweh 수는 일부러 성가시게 만든 번호 매기기 수열의 한 항목입니다. 이름도 바로 그 성가심에서 왔습니다("Walaweh!"). Walaweh 수는 0과 1만 사용한다는 점에서 이진수처럼 보이지만, 보통의 이진수와 달리 자릿수(길이)가 중요해서 앞자리의 0을 그대로 보존합니다. 여기서 Walaweh 수의 길이란 단순히 자릿수를 뜻합니다.
표기를 간단히 하기 위해, 길이가 L인 Walaweh 수들을 WL로 씁니다. 이는 정확히 L자리인 모든 Walaweh 수를 순서대로 나열한 목록입니다. 가장 작은 W1은 고정되어 있으며, 순서대로 "0"과 "1" 두 수입니다. L≥2일 때 WL은 WL−1로부터 만들어집니다. 먼저 WL−1의 복제본 C1과 C2를 만들고, 아래에서 정한 연산 하나를 적용해 이들을 각각 C1′과 C2′로 바꾼 뒤, 목록 C1′ 다음에 목록 C2′를 이어 붙이면 WL이 됩니다.
C1과 C2에 적용할 수 있는 연산은 다음 8가지입니다.
연산은 순환하며 반복됩니다. W1은 고정입니다. W2는 W1에 연산 1을, W3은 W2에 연산 2를 적용해 얻으며, 이런 식으로 진행하다가 연산 8 다음에는 다시 연산 1로 돌아갑니다. 따라서 W9는 W8에 연산 8을, W10은 W9에 연산 1을 적용한 결과이고, 이후로도 같은 방식으로 이어집니다. Walaweh!
다음은 W1, W2, W3, W4입니다.
W1
| 순번 | Walaweh 수 |
|---|---|
| 1 | 0 |
| 2 | 1 |
W2
| 순번 | Walaweh 수 |
|---|---|
| 1 | 00 |
| 2 | 10 |
| 3 | 01 |
| 4 | 11 |
W3
| 순번 | Walaweh 수 |
|---|---|
| 1 | 000 |
| 2 | 010 |
| 3 | 001 |
| 4 | 011 |
| 5 | 100 |
| 6 | 110 |
| 7 | 101 |
| 8 | 111 |
W4
| 순번 | Walaweh 수 |
|---|---|
| 1 | 0001 |
| 2 | 0101 |
| 3 | 0011 |
| 4 | 0111 |
| 5 | 1001 |
| 6 | 1101 |
| 7 | 1011 |
| 8 | 1111 |
| 9 | 0000 |
| 10 | 0100 |
| 11 | 0010 |
| 12 | 0110 |
| 13 | 1000 |
| 14 | 1100 |
| 15 | 1010 |
| 16 | 1110 |
연산 5~8에서 쓰이는 "목록 C2의 순서 뒤집기"를 보여 주기 위해, W6의 마지막 5개 수를 제시합니다.
W6
| 순번 | Walaweh 수 |
|---|---|
| 60 | 110011 |
| 61 | 101111 |
| 62 | 100111 |
| 63 | 101011 |
| 64 | 100011 |
길이와 순번이 주어지면 Walaweh 수를 구하고, 반대로 Walaweh 수가 주어지면 순번을 구하세요.
입력은 하나 이상의 질의로 이루어지며, 각 질의는 한 줄에 하나씩 파일 끝까지 주어집니다. 각 줄은 다음 두 형식 중 하나입니다.
Walaweh L N — 길이 L(1≤L<64)과 순번 N(1≤N≤2L).Sequence S — Walaweh 수의 이진 문자열 S이며, 그 길이는 64 미만입니다(길이는 S 자체로부터 알 수 있습니다).Walaweh L N 줄에 대해서는 길이가 L인 Walaweh 수 중 N번째 수를, 앞자리 0을 그대로 포함해 정확히 L자리로 출력하세요. Sequence S 줄에 대해서는 Walaweh 수 S의 순번을 출력하세요. 각 입력 줄마다 한 개의 답을 입력과 같은 순서로 출력합니다.