#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Node
{
ll val = 0;
bool lazy = false;
Node* left = nullptr;
Node* right = nullptr;
void propag(ll lx, ll rx)
{
if(!lazy) return;
ll mid = (lx + rx) / 2;
if(!left) left = new Node();
if(!right) right = new Node();
left->val = mid - lx;
left->lazy = true;
right->val = rx - mid;
right->lazy = true;
lazy = false;
}
};
void modif(Node* &node, ll l, ll r, ll lx, ll rx)
{
if(!node) node = new Node();
if(lx >= r || rx <= l) return;
if(lx >= l && rx <= r)
{
node->val = rx-lx;
node->lazy = true;
return;
}
node->propag(lx, rx);
ll mid = (lx + rx) / 2;
modif(node->left, l, r, lx, mid);
modif(node->right, l, r, mid, rx);
node->val = node->left->val + node->right->val;
}
ll get(Node* &node, ll l, ll r, ll lx, ll rx)
{
if(!node) node = new Node();
if(lx >= r || rx <= l) return 0;
node->propag(lx, rx);
if(lx >= l && rx <= r) return node->val;
ll mid = (lx + rx) / 2;
return get(node->left, l, r, lx, mid) + get(node->right, l, r, mid, rx);
}
int main()
{
ll amountq, type, a, b;
scanf("%lld", &amountq);
Node* root = nullptr;
ll shift = 0;
ll l = 0, r = 1e9+1;
while(amountq--)
{
scanf("%lld %lld %lld", &type, &a, &b);
a--;
a += shift;
b += shift;
if(type == 1)
{
shift = get(root, a, b, l, r);
printf("%lld\n", shift);
}
else
{
modif(root, a, b, l, r);
}
}
}