Walaweh

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

Walaweh 수는 일부러 성가시게 만든 번호 매기기 수열의 한 항목입니다. 이름도 바로 그 성가심에서 왔습니다("Walaweh!"). Walaweh 수는 0과 1만 사용한다는 점에서 이진수처럼 보이지만, 보통의 이진수와 달리 자릿수(길이)가 중요해서 앞자리의 0을 그대로 보존합니다. 여기서 Walaweh 수의 길이란 단순히 자릿수를 뜻합니다.

표기를 간단히 하기 위해, 길이가 LL인 Walaweh 수들을 WLW_L로 씁니다. 이는 정확히 LL자리인 모든 Walaweh 수를 순서대로 나열한 목록입니다. 가장 작은 W1W_1은 고정되어 있으며, 순서대로 "0"과 "1" 두 수입니다. L2L \ge 2일 때 WLW_LWL1W_{L-1}로부터 만들어집니다. 먼저 WL1W_{L-1}의 복제본 C1C_1C2C_2를 만들고, 아래에서 정한 연산 하나를 적용해 이들을 각각 C1C_1'C2C_2'로 바꾼 뒤, 목록 C1C_1' 다음에 목록 C2C_2'를 이어 붙이면 WLW_L이 됩니다.

C1C_1C2C_2에 적용할 수 있는 연산은 다음 8가지입니다.

  1. C1C_1의 모든 수 에 숫자 0을 붙이고, C2C_2의 모든 수 끝에 숫자 1을 붙입니다.
  2. C1C_1의 모든 수 에 숫자 0을 붙이고, C2C_2의 모든 수 앞에 숫자 1을 붙입니다.
  3. C1C_1의 모든 수 끝에 숫자 1을 붙이고, C2C_2의 모든 수 끝에 숫자 0을 붙입니다.
  4. C1C_1의 모든 수 앞에 숫자 1을 붙이고, C2C_2의 모든 수 앞에 숫자 0을 붙입니다.
  5. 목록 C2C_2의 순서를 뒤집은 다음 연산 1을 적용합니다.
  6. 목록 C2C_2의 순서를 뒤집은 다음 연산 2를 적용합니다.
  7. 목록 C2C_2의 순서를 뒤집은 다음 연산 3을 적용합니다.
  8. 목록 C2C_2의 순서를 뒤집은 다음 연산 4를 적용합니다.

연산은 순환하며 반복됩니다. W1W_1은 고정입니다. W2W_2W1W_1에 연산 1을, W3W_3W2W_2에 연산 2를 적용해 얻으며, 이런 식으로 진행하다가 연산 8 다음에는 다시 연산 1로 돌아갑니다. 따라서 W9W_9W8W_8에 연산 8을, W10W_{10}W9W_9에 연산 1을 적용한 결과이고, 이후로도 같은 방식으로 이어집니다. Walaweh!

다음은 W1W_1, W2W_2, W3W_3, W4W_4입니다.

W1W_1

순번Walaweh 수
10
21

W2W_2

순번Walaweh 수
100
210
301
411

W3W_3

순번Walaweh 수
1000
2010
3001
4011
5100
6110
7101
8111

W4W_4

순번Walaweh 수
10001
20101
30011
40111
51001
61101
71011
81111
90000
100100
110010
120110
131000
141100
151010
161110

연산 5~8에서 쓰이는 "목록 C2C_2의 순서 뒤집기"를 보여 주기 위해, W6W_6의 마지막 5개 수를 제시합니다.

W6W_6

순번Walaweh 수
60110011
61101111
62100111
63101011
64100011

길이와 순번이 주어지면 Walaweh 수를 구하고, 반대로 Walaweh 수가 주어지면 순번을 구하세요.

입력

입력은 하나 이상의 질의로 이루어지며, 각 질의는 한 줄에 하나씩 파일 끝까지 주어집니다. 각 줄은 다음 두 형식 중 하나입니다.

  • Walaweh L N — 길이 LL(1L<641 \le L < 64)과 순번 NN(1N2L1 \le N \le 2^L).
  • Sequence S — Walaweh 수의 이진 문자열 SS이며, 그 길이는 64 미만입니다(길이는 SS 자체로부터 알 수 있습니다).

출력

Walaweh L N 줄에 대해서는 길이가 LL인 Walaweh 수 중 NN번째 수를, 앞자리 0을 그대로 포함해 정확히 LL자리로 출력하세요. Sequence S 줄에 대해서는 Walaweh 수 SS의 순번을 출력하세요. 각 입력 줄마다 한 개의 답을 입력과 같은 순서로 출력합니다.