#include<bits/stdc++.h>
using namespace std;
class Node{
public:
Node* left;
Node* right;
};
class trie{
Node* root;
public:
trie(){
root = new Node();
}
void insert(int n){
Node*temp = root;
for(int i = 31; i >= 0; i--)
{
int bit = (n>>i)&1;
if(bit == 0)
{
if(temp->left == NULL)
{
temp->left = new Node();
}
temp = temp->left;
}
else
{
if(temp->right == NULL)
{
temp->right = new Node();
}
temp = temp->right;
}
}
}
int max_helper(int x){
Node* temp = root;
int current_ans = 0;
for(int i = 31; i >= 0; i--)
{
int bit = (x>>i)&1;
if(bit == 0)
{
//search for the compliment bit
if(temp->right == NULL)temp = temp->left;
else{
current_ans += (1 << i);
temp = temp->right;
}
}
else{
//serach for the bit 1
if(temp->left == NULL)temp = temp->right;
else{
current_ans += (1<<i);
temp = temp->left;
}
}
}
return current_ans;
}
int max_function(int* arr, int l, int r, int x)
{
int real_ans = 0;
int ans = 0;
for(int i = l; i <= r; i++)
{
int inp = arr[i];
insert(inp);
int inter = max_helper(x);
ans = max(ans, inter);
}
real_ans = (ans^x);
return real_ans;
}
};
int main()
{
int arr[100005] = {0};
trie tr;
int q;cin >> q;int i = 1;
while(q--){
int type;
cin >> type;
if(!type){
//int n;
cin >> arr[i];//tr.insert(n);
//arr[i] = n;
i++;
}
else{
int l, r, x;
cin >> l >> r >> x;
cout << tr.max_function(arr, l, r, x) << endl;
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIE5vZGV7CglwdWJsaWM6CglOb2RlKiBsZWZ0OwoJTm9kZSogcmlnaHQ7Cn07CgpjbGFzcyB0cmllewoJTm9kZSogcm9vdDsKCXB1YmxpYzoKCXRyaWUoKXsKCQlyb290ID0gbmV3IE5vZGUoKTsKCX0KCXZvaWQgaW5zZXJ0KGludCBuKXsKCQlOb2RlKnRlbXAgPSByb290OwoJCWZvcihpbnQgaSA9IDMxOyBpID49IDA7IGktLSkKCQl7CgkJCWludCBiaXQgPSAobj4+aSkmMTsKCQkJaWYoYml0ID09IDApCgkJCXsKCQkJCWlmKHRlbXAtPmxlZnQgPT0gTlVMTCkKCQkJCXsKCQkJCQl0ZW1wLT5sZWZ0ID0gbmV3IE5vZGUoKTsKCQkJCX0KCQkJCXRlbXAgPSB0ZW1wLT5sZWZ0OwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJaWYodGVtcC0+cmlnaHQgPT0gTlVMTCkKCQkJCXsKCQkJCQl0ZW1wLT5yaWdodCA9IG5ldyBOb2RlKCk7CgkJCQl9CgkJCQl0ZW1wID0gdGVtcC0+cmlnaHQ7CgkJCX0KCQl9Cgl9CglpbnQgbWF4X2hlbHBlcihpbnQgeCl7CgkJTm9kZSogdGVtcCA9IHJvb3Q7CgkJaW50IGN1cnJlbnRfYW5zID0gMDsKCQlmb3IoaW50IGkgPSAzMTsgaSA+PSAwOyBpLS0pCgkJewoJCQlpbnQgYml0ID0gKHg+PmkpJjE7CgkJCWlmKGJpdCA9PSAwKQoJCQl7CgkJCQkvL3NlYXJjaCBmb3IgdGhlIGNvbXBsaW1lbnQgYml0CgkJCQlpZih0ZW1wLT5yaWdodCA9PSBOVUxMKXRlbXAgPSB0ZW1wLT5sZWZ0OwoJCQkJZWxzZXsKCQkJCQljdXJyZW50X2FucyArPSAoMSA8PCBpKTsKCQkJCQl0ZW1wID0gdGVtcC0+cmlnaHQ7CgkJCQl9CgkJCX0KCQkJZWxzZXsKCQkJCS8vc2VyYWNoIGZvciB0aGUgYml0IDEKCQkJCWlmKHRlbXAtPmxlZnQgPT0gTlVMTCl0ZW1wID0gdGVtcC0+cmlnaHQ7CgkJCQllbHNlewoJCQkJCWN1cnJlbnRfYW5zICs9ICgxPDxpKTsKCQkJCQl0ZW1wID0gdGVtcC0+bGVmdDsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gY3VycmVudF9hbnM7Cgl9CglpbnQgbWF4X2Z1bmN0aW9uKGludCogYXJyLCBpbnQgbCwgaW50IHIsIGludCB4KQoJewoJCWludCByZWFsX2FucyA9IDA7CgkJaW50IGFucyA9IDA7CgkJZm9yKGludCBpID0gbDsgaSA8PSByOyBpKyspCgkJewoJCQlpbnQgaW5wID0gIGFycltpXTsKCQkJaW5zZXJ0KGlucCk7CgkJCWludCBpbnRlciA9IG1heF9oZWxwZXIoeCk7CgkJCWFucyA9IG1heChhbnMsIGludGVyKTsKCQl9CgkJcmVhbF9hbnMgPSAoYW5zXngpOwoJCXJldHVybiByZWFsX2FuczsKCX0KfTsKCmludCBtYWluKCkKewoJaW50IGFyclsxMDAwMDVdID0gezB9OwoJdHJpZSB0cjsKCWludCBxO2NpbiA+PiBxO2ludCBpID0gMTsKCXdoaWxlKHEtLSl7CgkJaW50IHR5cGU7CgkJY2luID4+IHR5cGU7CgkJaWYoIXR5cGUpewoJCQkvL2ludCBuOwoJCQljaW4gPj4gYXJyW2ldOy8vdHIuaW5zZXJ0KG4pOwoJCQkvL2FycltpXSA9IG47CgkJCWkrKzsKCQl9CgkJZWxzZXsKCQkJaW50IGwsIHIsIHg7CgkJCWNpbiA+PiBsID4+IHIgPj4geDsKCQkJY291dCA8PCB0ci5tYXhfZnVuY3Rpb24oYXJyLCBsLCByLCB4KSA8PCBlbmRsOwoJCX0KCX0KCXJldHVybiAwOwp9