#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 1000007
#define ll long long
#define lson now<<1
#define rson now<<1|1
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
const int uni=(1<<30)-1;
int bin[31],tag[N<<2],val[N<<2];
struct data {
int f0,f1,len;
data() {f0=0,f1=0;}
data operator+(const data b) const {
data c;
c.len=len+b.len;
c.f0=f0,c.f1=f1;
if(f0==len) c.f0+=b.f0;
if(f1==len) c.f1+=b.f1;
return c;
}
}s[N<<2];
void mark(int now,int v) {
tag[now]=v;
if(v==1) {
s[now].f0=0;
s[now].f1=s[now].len;
}
else {
s[now].f0=s[now].len;
s[now].f1=0;
}
if(s[now].len==1) {
val[now]=(v?uni:0);
}
}
void pushdown(int now) {
if(tag[now]!=-1) {
mark(lson,tag[now]);
mark(rson,tag[now]);
tag[now]=-1;
}
}
void build(int l,int r,int now) {
s[now].len=r-l+1;
s[now].f0=s[now].len;
s[now].f1=0;
tag[now]=-1;
if(l==r) {
return;
}
int mid=(l+r)>>1;
build(l,mid,lson),build(mid+1,r,rson);
}
void uptag(int l,int r,int now,int L,int R,int v) {
if(l>=L&&r<=R) {
mark(now,v);
return;
}
pushdown(now);
int mid=(l+r)>>1;
if(L<=mid) uptag(l,mid,lson,L,R,v);
if(R>mid) uptag(mid+1,r,rson,L,R,v);
s[now]=s[lson]+s[rson];
}
void upval(int l,int r,int now,int p,int v) {
if(l==r) {
val[now]+=v;
if(val[now]<0) {
val[now]+=bin[30];
}
val[now]&=uni;
int flag=(val[now]&1),p;
s[now].f0=s[now].f1=0;
if(flag) s[now].f1=1;
else s[now].f0=1;
for(int i=1;i<=29;++i) {
p=(val[now]&(1<<i))>0;
if(p^flag) break;
if(flag) ++s[now].f1;
else ++s[now].f0;
}
return;
}
pushdown(now);
int mid=(l+r)>>1;
if(p<=mid) upval(l,mid,lson,p,v);
else upval(mid+1,r,rson,p,v);
s[now]=s[lson]+s[rson];
}
int qval(int l,int r,int now,int p) {
if(l==r) return val[now];
pushdown(now);
int mid=(l+r)>>1;
if(p<=mid) return qval(l,mid,lson,p);
else return qval(mid+1,r,rson,p);
}
data query(int l,int r,int now,int L,int R) {
if(l>=L&&r<=R) {
return s[now];
}
pushdown(now);
int mid=(l+r)>>1;
if(L<=mid&&R>mid) return query(l,mid,lson,L,R)+query(mid+1,r,rson,L,R);
else if(L<=mid) return query(l,mid,lson,L,R);
else return query(mid+1,r,rson,L,R);
}
void init() {
for(int i=0;i<31;++i) bin[i]=1<<i;
}
void ADD(int x,int y) {
// x 块上加上 y
int ori=qval(1,n,1,x);
upval(1,n,1,x,y);
if(ori+y>uni) {
node p=query(1,n,1,x+1,n);
if(p.f1) {
uptag(1,n,1,x+1,x+p.f1,0);
}
upval(1,n,1,x+1+p.f1,1);
}
}
void DEC(int x,int y) {
int ori=qval(1,n,1,x);
upval(1,n,1,x,-y);
if(ori-y<0) {
node p=query(1,n,1,x+1,n);
if(p.f0) {
uptag(1,n,1,x+1,x+p.f0,1);
}
upval(1,n,1,x+1+p.f0,-1);
}
}
int main() {
setIO("input");
init();
int m,x,y,z;
scanf("%d%d%d%d",&m,&x,&y,&z);
for(int i=1;i<=m;++i) {
scanf("%d",&z);
if(z==1) {
scanf("%d%d",&x,&y);
if(!x) continue;
int rx=abs(x);
}
else {
scanf("%d",&x);
}
}
return 0;
}