#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int n,c,op,val,i1[32],i0[32];
void change(int way,int y)
{
// printf("(%d,%d)",way,y);
int wei=0;
if(way==1)
{
for(int a=0;a<=29;a++)
{
(y&1)?i1[wei]=i1[wei]:i1[wei]=i0[wei]=0;
y>>=1;wei++;
}
}
else if(way==2)
{
for(int a=0;a<=29;a++)
{
(y&1)?i1[wei]=i0[wei]=1:i1[wei]=i1[wei];
y>>=1;wei++;
}
}
else
{
for(int a=0;a<=29;a++)
{
(y&1)?i1[wei]^=1,i0[wei]^=1:i1[wei]=i1[wei];
y>>=1;wei++;
}
}
}
int newer(int x,int wei)
{
if(wei==30)
return 0;
if(x&1)
return i1[wei]+(newer(x>>1,wei+1)<<1);
else
return i0[wei]+(newer(x>>1,wei+1)<<1);
}
int main()
{
scanf("%d%d",&n,&c);
for(int a=0;a<=30;a++)
i1[a]=1;
for(int a=1;a<=n;a++)
{
scanf("%d%d",&op,&val);
change(op,val);
c=newer(c,0);
printf("%d\n",c);
}
return 0;
}
感觉代码以及思路和题解基本一致,但是不知道哪有问题。