#include<bits/stdc++.h>
#define INF 1e16
#define endl '\n'
#define PI acos(-1)
#define pb push_back
#define int long long
#define mem(x,v) memset(x,v,sizeof x)
using namespace std;
const int N = 2e5+5;
inline int read(){
register int x=0,f=1;register char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,last,tot,x,y,z,rt[N];
struct FHQ{int ls,rs,val,sum,siz,rnd,rev;}t[N<<6];
int New(int val){t[++tot]={0,0,val,val,1,rand(),0};return tot;}
int Copy(int x){int rt=New(0);t[rt]=t[x];return rt;}
void pushup(int u){
t[u].siz=t[t[u].ls].siz+t[t[u].rs].siz+1;
t[u].sum=t[t[u].ls].sum+t[t[u].rs].sum+t[u].val;
}
void pushdown(int u){
if(!t[u].rev)return;
if(t[u].ls)t[u].ls=Copy(t[u].ls);
if(t[u].rs)t[u].rs=Copy(t[u].rs);
swap(t[u].ls,t[u].rs);
if(t[u].ls)t[t[u].ls].rev^=1;
if(t[u].rs)t[t[u].rs].rev^=1;
t[u].rev=0;
}
void split(int u,int k,int &x,int &y){
if(!u){x=y=0;return;}
pushdown(u);
if(t[t[u].ls].siz<k){
x=Copy(u);
split(t[x].rs,k-t[t[x].ls].siz-1,t[x].rs,y);
pushup(x);
}
else{
y=Copy(u);
split(t[y].ls,k,x,t[y].ls);
pushup(y);
}
}
int merge(int x,int y){
if(!x||!y)return x+y;
pushdown(x),pushdown(y);
if(t[x].rnd<t[y].rnd){
t[x].rs=merge(t[x].rs,y);
pushup(x);return x;
}
else{
t[y].ls=merge(x,t[y].ls);
pushup(y);return y;
}
}
void insert(int Past,int Now,int pos,int val){
split(rt[Past],pos,x,y);
rt[Now]=merge(merge(x,New(val)),y);
}
void del(int Past,int Now,int pos){
split(rt[Past],pos-1,x,y),split(y,pos,y,z);
y=merge(t[y].ls,t[y].rs);
rt[Now]=merge(merge(x,y),z);
}
void Rev(int Past,int Now,int l,int r){
split(rt[Past],l-1,x,y),split(y,r,y,z);
t[y].rev^=1;
rt[Now]=merge(merge(x,y),z);
}
int Query(int Past,int Now,int l,int r){
split(rt[Past],l-1,x,y),split(y,r,y,z);
int ans=t[y].sum;
rt[Now]=merge(merge(x,y),z);
return ans;
}
signed main(){
cin>>n;
for(int i=1,t,op,l,r,pos,val;i<=n;i++){
cin>>t>>op;
if(op==1)cin>>pos>>val,pos^=last,val^=last,insert(t,i,pos,val);
if(op==2)cin>>pos,pos^=last,del(t,i,pos);
if(op==3)cin>>l>>r,l^=last,r^=last,Rev(t,i,l,r);
if(op==4)cin>>l>>r,l^=last,r^=last,last=Query(t,i,l,r),cout<<last<<endl;
}
return 0;
}