#include #define int long long using namespace std; const int N=1000010; const int mod=998244353; int n,xx,yy; int a[N]; struct SegmentTree{ pair t[N<<2]; pair l1[N<<2]; int l2[N<<2]; int ls(int p){return p<<1;} int rs(int p){return p<<1|1;} void push_up(int p){ t[p]=make_pair(t[ls(p)].first+t[rs(p)].first,t[ls(p)].second+t[rs(p)].second); return; } void build(int l,int r,int p){ if(l==r){ t[p]=make_pair(xx,yy); return; } int mid=(l+r)>>1; build(l,mid,ls(p)); build(mid+1,r,rs(p)); return; } void rotate(int p){ t[p].first=-t[p].first; swap(t[p].first,t[p].second); l1[p].first=-l1[p].first; swap(l1[p].first,l1[p].second); l2[p]^=1; return; } void add(int p,pair x){ t[p].first+=x.first;t[p].second+=x.second; l1[p].first+=x.first;l1[p].second+=x.second; return; } void push_down(int p){ if(l2[p]){ rotate(ls(p)); rotate(rs(p)); l2[p]=0; } add(ls(p),l1[p]); add(rs(p),l1[p]); l1[p]=make_pair(0,0); return; } void Rotate(int L,int R,int l,int r,int p){ if(L<=l&&r<=R){ rotate(p); return; } push_down(p); int mid=(l+r)>>1; if(L<=mid)Rotate(L,R,l,mid,ls(p)); if(R>mid)Rotate(L,R,mid+1,r,rs(p)); push_up(p); return; } void Add(int L,int R,pair x,int l,int r,int p){ if(L<=l&&r<=R){ add(p,x); return; } push_down(p); int mid=(l+r)>>1; if(L<=mid)Add(L,R,x,l,mid,ls(p)); if(R>mid)Add(L,R,x,mid+1,r,rs(p)); push_up(p); return; } pair query(int D,int l,int r,int p){ if(l==r)return t[p]; push_down(p); int mid=(l+r)>>1; if(D<=mid)return query(D,l,mid,ls(p)); return query(D,mid+1,r,rs(p)); } }T; signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("delay.in","r",stdin); // freopen("delay.out","w",stdout); cin>>n>>xx>>yy; T.build(1,n,1); for(int i=1;i<=n;i++){ int op,x; cin>>op; if(op==1){ cin>>x; T.Add(1,i,make_pair(x,0),1,n,1); } if(op==2){ cin>>x; T.Add(1,i,make_pair(0,x),1,n,1); } if(op==3)T.Rotate(1,i,1,n,1); } for(int i=1;i<=n;i++){ pairres=T.query(i,1,n,1); cout<