#include <stdio.h>
unsigned int Left(unsigned int x, int p) {
int num = 1 << 12;
num = num - 1;
x = x << p;
x = num & x;
return x;
}
unsigned int Right(unsigned int x, int p) {
int num = -1;
//10000000 00000000 00000000 00000001 源码
//11111111 11111111 11111111 11111110 反码
//11111111 11111111 11111111 11111111 补码
num = num << (12-p);
x = x >> p;
x = x | num;
return Left(x,0);
}
unsigned int Assignment_zero(unsigned int x, int p) {
int num = 1 << p;
num = ~num;
x = x & num;
return x;
}
unsigned int Assignment_one(unsigned int x, int p) {
int num = 1 << p;
x = x | num;
return x;
}
int main() {
int T = 0;
int o = 0;
unsigned int x = 0;
int p = 0;
scanf("%d", &T);
for (int i = 0;i < T;i++) {
scanf("%d %u %d", &o, &x, &p);
if (1 == o) {
printf("%u\n", Left(x, p));
}
else if(2 == o) {
printf("%u\n", Right(x, p));
}
else if (3 == o) {
printf("%u\n", Assignment_zero(x, p));
}
else {
printf("%u\n", Assignment_one(x, p));
}
}
return 0;
}