모눈종이 접기

N x N 격자 종이를 아래를 위로, 오른쪽을 왼쪽으로 번갈아 반으로 접어 1 x 1이 될 때까지 접은 뒤, 생긴 기둥을 아래에서 위로 읽은 수열에서 주어진 수 X의 위치 P를 구하거나, 주어진 위치 P에 있는 수 X를 구한다. N = 2^K이고 K는 최대 31, 질의는 최대 10000개이다.

보통7재귀분할 정복구현수학아직 제출이 없습니다시간 제한1초메모리 제한32 MB

문제

정사각형 칸으로 이루어진 N×NN \times N 크기의 모눈종이가 있다. NN은 2의 거듭제곱이다.

칸에는 위쪽 줄부터 차례로, 한 줄 안에서는 왼쪽에서 오른쪽으로 11부터 N2N^2까지 번호를 매긴다. 각 칸에는 그 칸의 번호만 적혀 있다.

이 종이를 반으로 접는 동작을 되풀이한다. 먼저 아래쪽 절반을 위쪽 절반 위로 접고, 그다음 오른쪽 절반을 왼쪽 절반 위로 접는다. 접힌 종이가 1×11 \times 1 크기가 될 때까지 두 동작을 이 순서로 번갈아 수행한다.

다 접고 나면 칸은 1×1×N21 \times 1 \times N^2 크기의 기둥을 이룬다. 이 기둥을 맨 아래 칸부터 맨 위 칸까지 읽어서 얻은 번호의 수열을 S=S1,S2,,SP,,SN2S = \langle S_1, S_2, \ldots, S_P, \ldots, S_{N^2} \rangle이라고 하자. PP는 수열에서의 위치를 뜻한다.

지루한 회의에 앉아 있던 개발자가 종이를 접어 이런 기둥을 만들면서 다음 두 질문의 답을 구하려고 한다.

  • 1번 질문. 번호 XX가 주어진다. 이 번호는 수열 SS의 몇 번째 위치 PP에 있는가?
  • 2번 질문. 수열 SS의 위치 PP가 주어진다. 이 위치에 있는 번호 XX는 무엇인가?

질문의 종류에 따라 번호 XX 또는 위치 PP를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 질문의 개수 QQ가 주어진다. 다음 QQ개의 줄에는 각각 세 정수 TT, KK, VV가 공백 하나로 구분되어 주어진다.

  • TT는 질문의 종류이다. T=1T = 1 또는 T=2T = 2이다.
  • KK는 종이의 크기를 정하는 지수이다. 종이의 크기는 N=2KN = 2^K이다.
  • VVT=1T = 1이면 번호 XX이고, T=2T = 2이면 위치 PP이다.

출력

질문마다 한 줄씩, 모두 QQ개의 줄을 출력한다. 각 줄에는 질문의 종류에 따라 위치 PP 또는 번호 XX를 정수 하나로 출력한다.

제한

  • 1Q100001 \le Q \le 10000
  • 1T21 \le T \le 2
  • 0K310 \le K \le 31
  • 1X,PN21 \le X, P \le N^2, 여기서 N=2KN = 2^K이다.

힌트

N=2N = 2일 때 기둥을 아래에서 위로 읽으면 S=1,3,4,2S = \langle 1, 3, 4, 2 \rangle이다.

N=4N = 4일 때는 S=1,13,16,4,8,12,9,5,6,10,11,7,3,15,14,2S = \langle 1, 13, 16, 4, 8, 12, 9, 5, 6, 10, 11, 7, 3, 15, 14, 2 \rangle이다.