// Born_To_Laugh - Hughie Do
#include <bits/stdc++.h>
#define alle(AC) AC.begin(), AC.end()
#define fi first
#define se second
using namespace std;
typedef long long ll;
[[maybe_unused]] const int MOD = 998244353, INF = 1e9 + 7;
class SegmentTree
{
private:
int n;
vector<int> tree;
vector<bool> lazy;
inline void ope(int id, int l, int r){
if(lazy[id] == 0) return;
tree[id] = lazy[id] * (r - l + 1);
if(l != r){
lazy[id << 1] = lazy[id];
lazy[id << 1|1] = lazy[id];
}
lazy[id] = 0;
}
inline void upd(int id, int l, int r, int lo, int hi){
ope(id, l, r);
if(l > hi || r < lo) return;
else if(l >= lo && r <= hi){
lazy[id] = 1;
ope(id, l, r);
return;
}
int mid = (l + r) >> 1;
upd(id << 1, l, mid, lo, hi);
upd(id << 1|1, mid + 1, r, lo, hi);
tree[id] = tree[id << 1] + tree[id << 1|1];
}
inline int qr(int id, int l, int r, int lo, int hi){
ope(id, l, r);
if(l > hi || r < lo) return 0;
else if(l >= lo && r <= hi) return tree[id];
int mid = (l + r) >> 1;
return qr(id << 1, l, mid, lo, hi) + qr(id << 1|1, mid + 1, r, lo, hi);
}
public:
inline void init(int len){
n = len;
tree.assign(n << 2, 0);
lazy.assign(n << 2, 0);
}
inline void upd(int l, int r){
upd(1, 1, n, l, r);
}
inline int qr(int l, int r){
return qr(1, 1, n, l, r);
}
};
SegmentTree st;
int n;
inline void solve(){
st.init(int(1e7) + 10);
cin >> n;
int c = 0;
for(int i=1; i<=n; ++i){
int d;cin >> d;
if(d == 1){
int x, y;cin >> x >> y;
c = st.qr(x + c, y + c);
cout << c << '\n';
}
else{
int x, y;cin >> x >> y;
st.upd(x + c, y + c);
}
}
}
signed main(){
// freopen("inp.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
solve();
}