#include <iostream>
#include <cmath>
using namespace std;
// 獲取數字 X 在 S 序列中的位置 P
int findPosition(int N, int X) {
int row = X / N, col = X % N;
int pos = 0;
for (int size = N; size > 1; size /= 2) {
int half = size / 2;
if (row >= half) { // 垂直折疊
row = size - row - 1;
pos += half * half;
}
if (col >= half) { // 水平折疊
col = size - col - 1;
pos += half * half;
}
}
return pos + 1; // 轉為 1-based index
}
// 獲取序列位置 P 的數字 X
int findNumber(int N, int P) {
int row = 0, col = 0;
int pos = P - 1; // 轉為 0-based index
for (int size = 1; size < N; size *= 2) {
int half = size;
if (pos >= half * half * 2) {
pos -= half * half * 2;
col += half;
}
if (pos >= half * half) {
pos -= half * half;
row += half;
}
}
return row * N + col;
}
int main() {
int N, Q, type, value, k;
cin >> Q; // 讀取 N 與查詢數量 Q
while (Q--) {
cin >> type >> k >> value;
N = 1 << k;
if (type == 2) {
cout << findPosition(N, value) << endl;
} else {
cout << findNumber(N, value) << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyDnjbLlj5bmlbjlrZcgWCDlnKggUyDluo/liJfkuK3nmoTkvY3nva4gUAppbnQgZmluZFBvc2l0aW9uKGludCBOLCBpbnQgWCkgewogICAgaW50IHJvdyA9IFggLyBOLCBjb2wgPSBYICUgTjsKICAgIGludCBwb3MgPSAwOwogICAgCiAgICBmb3IgKGludCBzaXplID0gTjsgc2l6ZSA+IDE7IHNpemUgLz0gMikgewogICAgICAgIGludCBoYWxmID0gc2l6ZSAvIDI7CiAgICAgICAgaWYgKHJvdyA+PSBoYWxmKSB7IC8vIOWeguebtOaKmOeWigogICAgICAgICAgICByb3cgPSBzaXplIC0gcm93IC0gMTsKICAgICAgICAgICAgcG9zICs9IGhhbGYgKiBoYWxmOwogICAgICAgIH0KICAgICAgICBpZiAoY29sID49IGhhbGYpIHsgLy8g5rC05bmz5oqY55aKCiAgICAgICAgICAgIGNvbCA9IHNpemUgLSBjb2wgLSAxOwogICAgICAgICAgICBwb3MgKz0gaGFsZiAqIGhhbGY7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHBvcyArIDE7IC8vIOi9ieeCuiAxLWJhc2VkIGluZGV4Cn0KCi8vIOeNsuWPluW6j+WIl+S9jee9riBQIOeahOaVuOWtlyBYCmludCBmaW5kTnVtYmVyKGludCBOLCBpbnQgUCkgewogICAgaW50IHJvdyA9IDAsIGNvbCA9IDA7CiAgICBpbnQgcG9zID0gUCAtIDE7IC8vIOi9ieeCuiAwLWJhc2VkIGluZGV4CiAgICAKICAgIGZvciAoaW50IHNpemUgPSAxOyBzaXplIDwgTjsgc2l6ZSAqPSAyKSB7CiAgICAgICAgaW50IGhhbGYgPSBzaXplOwogICAgICAgIGlmIChwb3MgPj0gaGFsZiAqIGhhbGYgKiAyKSB7CiAgICAgICAgICAgIHBvcyAtPSBoYWxmICogaGFsZiAqIDI7CiAgICAgICAgICAgIGNvbCArPSBoYWxmOwogICAgICAgIH0KICAgICAgICBpZiAocG9zID49IGhhbGYgKiBoYWxmKSB7CiAgICAgICAgICAgIHBvcyAtPSBoYWxmICogaGFsZjsKICAgICAgICAgICAgcm93ICs9IGhhbGY7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJvdyAqIE4gKyBjb2w7Cn0KCmludCBtYWluKCkgewogICAgaW50IE4sIFEsIHR5cGUsIHZhbHVlLCBrOwogICAgY2luID4+IFE7IC8vIOiugOWPliBOIOiIh+afpeipouaVuOmHjyBRCiAgICB3aGlsZSAoUS0tKSB7CiAgICAgICAgY2luID4+IHR5cGUgPj4gayA+PiB2YWx1ZTsKICAgICAgICBOID0gMSA8PCBrOwogICAgICAgIGlmICh0eXBlID09IDIpIHsKICAgICAgICAgICAgY291dCA8PCBmaW5kUG9zaXRpb24oTiwgdmFsdWUpIDw8IGVuZGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY291dCA8PCBmaW5kTnVtYmVyKE4sIHZhbHVlKSA8PCBlbmRsOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9