#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl "\n"
#define sz(s) (int)s.size()
#define all(x) x.begin(),x.end()
extern struct node *const EMPTY;
struct node{
ll sum,lazy;
node *l,*r;
void set(int ns,int ne,int v){
sum=(ne-ns)+1;
lazy=1;
}
node():sum(0),lazy(-1),l(this),r(this){};
node(int v):sum(v),lazy(-1),l(EMPTY),r(EMPTY){};
};
node *const EMPTY = new node();
inline void pushDown(node *&cur, int ns, int ne) {
if (cur->lazy == -1) return;
if (ns == ne) {
cur->lazy = -1;
return;
}
int m = ns + (ne - ns) / 2;
if (cur->l == EMPTY) cur->l = new node(0);
if (cur->r == EMPTY) cur->r = new node(0);
cur->l->set(ns, m, cur->lazy);
cur->r->set(m + 1, ne, cur->lazy);
cur->lazy = -1;
}
inline void update(int qs,int qe,node *&cur,int ns=1,int ne=1e9){
if(qs>ne || qe<ns)return;
if(cur==EMPTY)cur=new node(0);
if(qs<=ns && qe>=ne){
cur->set(ns,ne,1);
return;
}
pushDown(cur,ns,ne);
int m=ns+(ne-ns)/2;
update(qs,qe,cur->l,ns,m);
update(qs,qe,cur->r,m+1,ne);
cur->sum=cur->l->sum+cur->r->sum;
}
inline ll query(int qs,int qe,node *&cur,int ns=1,int ne=1e9){
if(qs>ne || qe<ns)return 0;
if(qs<=ns && qe>=ne)return cur->sum;
if(cur==EMPTY)return 0;
pushDown(cur,ns,ne);
int m=ns+(ne-ns)/2;
return query(qs,qe,cur->l,ns,m)+query(qs,qe,cur->r,m+1,ne);
}
void solve(size_t tc){
int m;
scanf("%d", &m);
node *root = EMPTY;
ll C=0;
while(m--){
int t,l,r;
scanf("%d %d %d", &t, &l, &r);
if(t==2){
// cout<<l+C<<" "<<r+C<<endl;
update(l+C,r+C,root);
}else{
C=query(l+C,r+C,root);
cout<<C<<endl;
}
}
}
signed main() {
ios::sync_with_stdio(false);
cout.tie(NULL);
cin.tie(NULL);
freopen("f.in", "r", stdin);
freopen("f.out", "w", stdout);
size_t _OO_ = 1;
//cin >> _OO_;
for (size_t tc = 1; tc <= _OO_; tc++){
solve(tc);
}
return 0;
}