#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define fast std::ios::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL)
#define ll long long
#define test cout<<"archit\n"
#define debug(x) cout<<x<<" "
#define debug1(x) cout<<x<<"\n"
#define debug2(x,y) cout<<x<<" "<<y<<"\n"
#define pb push_back
#define pi pair<int,int>
#define fi first
#define si second
#define mod (ll)1000000007
#define mxn 1000005
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
using namespace std;
using namespace __gnu_pbds;
typedef struct trienode
{
int val;
vector<int>v;
struct trienode* child[2];
}trienode;
trienode* newNode()
{
trienode* t = new trienode;
t->v.clear();
t->val=0;
t->child[0]=t->child[1]=NULL;
return t;
}
void insert(trienode* root, int value, int index)
{
trienode* curr = root;
for(int i=31;i>=0;i--){
bool bit = value&(1<<i);
if(curr->child[bit] == NULL){
curr->child[bit] = newNode();
}
curr->child[bit]->v.pb(index);
curr = curr->child[bit];
}
curr->val = value;
return;
}
bool lieBetweenRange(vector<int>v, int left, int right)
{
if(v.size() == 0){
return false;
}
if(v[0]>right || v[v.size()-1]<left){
return false;
}
int l=0,r=v.size()-1;
while(l<=r){
int mid = l+(r-l)/2;
if(v[mid]>=left && v[mid]<=right){
return true;
}
if(v[mid]<left){
l=mid+1;
}
else if(v[mid]>right){
r=mid-1;
}
}
return false;
}
int getQuery(trienode* root, int l, int r, int value)
{
trienode* curr = root;
for(int i=31;i>=0;i--){
bool bit = value&(1<<i);
if(curr->child[1-bit]!=NULL){
vector<int>temp = curr->child[1-bit]->v;
if(lieBetweenRange(temp, l, r) == true){
//test;
curr = curr->child[1-bit];
}
}
else if(curr->child[bit]!=NULL){
vector<int>temp = curr->child[bit]->v;
if(lieBetweenRange(temp, l, r) == true){
curr = curr->child[bit];
}
}
}
return curr->val;
}
int main()
{
fast;
int q; cin>>q;
int type,l,r,val;
trienode* root = newNode();
int index=1;
for(int i=1;i<=q;i++){
cin>>type;
if(type == 0){
cin>>val;
insert(root, val, index);
index+=1;
}
else{
cin>>l>>r>>val;
debug1(getQuery(root, l, r, val));
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KI2RlZmluZSBmYXN0IHN0ZDo6aW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZShOVUxMKTtjb3V0LnRpZShOVUxMKQojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHRlc3QgY291dDw8ImFyY2hpdFxuIgojZGVmaW5lIGRlYnVnKHgpIGNvdXQ8PHg8PCIgIgojZGVmaW5lIGRlYnVnMSh4KSBjb3V0PDx4PDwiXG4iCiNkZWZpbmUgZGVidWcyKHgseSkgY291dDw8eDw8IiAiPDx5PDwiXG4iCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcGkgcGFpcjxpbnQsaW50PgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2kgc2Vjb25kCiNkZWZpbmUgbW9kIChsbCkxMDAwMDAwMDA3CiNkZWZpbmUgbXhuIDEwMDAwMDUKI2RlZmluZSBvcmRlcmVkX3NldCB0cmVlPGludCwgbnVsbF90eXBlLGxlc3M8aW50PiwgcmJfdHJlZV90YWcsdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKdHlwZWRlZiBzdHJ1Y3QgdHJpZW5vZGUKewogICAgaW50IHZhbDsKICAgIHZlY3RvcjxpbnQ+djsKICAgIHN0cnVjdCB0cmllbm9kZSogY2hpbGRbMl07Cn10cmllbm9kZTsKdHJpZW5vZGUqIG5ld05vZGUoKQp7CiAgICB0cmllbm9kZSogdCA9IG5ldyB0cmllbm9kZTsKICAgIHQtPnYuY2xlYXIoKTsKICAgIHQtPnZhbD0wOwogICAgdC0+Y2hpbGRbMF09dC0+Y2hpbGRbMV09TlVMTDsKICAgIHJldHVybiB0Owp9CnZvaWQgaW5zZXJ0KHRyaWVub2RlKiByb290LCBpbnQgdmFsdWUsIGludCBpbmRleCkKewogICAgdHJpZW5vZGUqIGN1cnIgPSByb290OwogICAgZm9yKGludCBpPTMxO2k+PTA7aS0tKXsKICAgICAgICBib29sIGJpdCA9IHZhbHVlJigxPDxpKTsKICAgICAgICBpZihjdXJyLT5jaGlsZFtiaXRdID09IE5VTEwpewogICAgICAgICAgICBjdXJyLT5jaGlsZFtiaXRdID0gbmV3Tm9kZSgpOwogICAgICAgIH0KICAgICAgICBjdXJyLT5jaGlsZFtiaXRdLT52LnBiKGluZGV4KTsKICAgICAgICBjdXJyID0gY3Vyci0+Y2hpbGRbYml0XTsKICAgIH0KICAgIGN1cnItPnZhbCA9IHZhbHVlOwogICAgcmV0dXJuOwp9CmJvb2wgbGllQmV0d2VlblJhbmdlKHZlY3RvcjxpbnQ+diwgaW50IGxlZnQsIGludCByaWdodCkKewogICAgaWYodi5zaXplKCkgPT0gMCl7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYodlswXT5yaWdodCB8fCB2W3Yuc2l6ZSgpLTFdPGxlZnQpewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGludCBsPTAscj12LnNpemUoKS0xOwogICAgd2hpbGUobDw9cil7CiAgICAgICAgaW50IG1pZCA9IGwrKHItbCkvMjsKICAgICAgICBpZih2W21pZF0+PWxlZnQgJiYgdlttaWRdPD1yaWdodCl7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZih2W21pZF08bGVmdCl7CiAgICAgICAgICAgIGw9bWlkKzE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYodlttaWRdPnJpZ2h0KXsKICAgICAgICAgICAgcj1taWQtMTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KaW50IGdldFF1ZXJ5KHRyaWVub2RlKiByb290LCBpbnQgbCwgaW50IHIsIGludCB2YWx1ZSkKewogICAgdHJpZW5vZGUqIGN1cnIgPSByb290OwogICAgZm9yKGludCBpPTMxO2k+PTA7aS0tKXsKICAgICAgICBib29sIGJpdCA9IHZhbHVlJigxPDxpKTsKICAgICAgICBpZihjdXJyLT5jaGlsZFsxLWJpdF0hPU5VTEwpewogICAgICAgICAgICB2ZWN0b3I8aW50PnRlbXAgPSBjdXJyLT5jaGlsZFsxLWJpdF0tPnY7CiAgICAgICAgICAgIGlmKGxpZUJldHdlZW5SYW5nZSh0ZW1wLCBsLCByKSA9PSB0cnVlKXsKICAgICAgICAgICAgICAgIC8vdGVzdDsKICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5jaGlsZFsxLWJpdF07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZihjdXJyLT5jaGlsZFtiaXRdIT1OVUxMKXsKICAgICAgICAgICAgdmVjdG9yPGludD50ZW1wID0gY3Vyci0+Y2hpbGRbYml0XS0+djsKICAgICAgICAgICAgaWYobGllQmV0d2VlblJhbmdlKHRlbXAsIGwsIHIpID09IHRydWUpewogICAgICAgICAgICAgICAgY3VyciA9IGN1cnItPmNoaWxkW2JpdF07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gY3Vyci0+dmFsOwp9CmludCBtYWluKCkKewogICAgZmFzdDsKICAgIGludCBxOyBjaW4+PnE7CiAgICBpbnQgdHlwZSxsLHIsdmFsOwogICAgdHJpZW5vZGUqIHJvb3QgPSBuZXdOb2RlKCk7CiAgICBpbnQgaW5kZXg9MTsKICAgIGZvcihpbnQgaT0xO2k8PXE7aSsrKXsKICAgICAgICBjaW4+PnR5cGU7CiAgICAgICAgaWYodHlwZSA9PSAwKXsKICAgICAgICAgICAgY2luPj52YWw7CiAgICAgICAgICAgIGluc2VydChyb290LCB2YWwsIGluZGV4KTsKICAgICAgICAgICAgaW5kZXgrPTE7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGNpbj4+bD4+cj4+dmFsOwogICAgICAgICAgICBkZWJ1ZzEoZ2V0UXVlcnkocm9vdCwgbCwgciwgdmFsKSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0K