#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;
}