#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e5 + 10;
struct node
{
int l, r,val=0,tag=-1;
node*lson=NULL, *rson=NULL;
node(int l, int r){ this->l = l, this->r = r; }
};
node* root = new node(1, 1e18);
inline void push_down(node* now)
{
int l = now->l, r = now->r;
int mid = l + r >> 1;
if ((!now->lson) &&(!now->rson))
{
now->lson = new node(l, mid);
now->rson = new node(mid + 1, r);
if (now->val == now->r - now->l + 1)
{
now->lson->val = mid - l + 1;
now->rson->val = r - mid;
}
now->lson->tag = now->rson->tag = now->tag;
now->tag = -1;
return;
}
if (now->tag == 0)
{
now->lson->val = 0;
now->rson->val = 0;
now->lson->tag = 0;
now->rson->tag = 0;
}
else if (now->tag == 1)
{
now->lson->val = mid-l+1;
now->rson->val = r-mid;
now->lson->tag = 1;
now->rson->tag = 1;
}
else if (now->tag == 2)
{
now->lson->val = mid - l + 1-now->lson->val;
now->rson->val = r - mid-now->rson->val;
now->lson->tag = 2;
now->rson->tag = 2;
}
now->tag = -1;
}
inline void push_up(node* now)
{
now->val = now->lson->val + now->rson->val;
}
void add(node* now, int ql, int qr)
{
int l = now->l, r = now->r;
if (l>=ql &&r<=qr)
{
now->val = now->r - now->l + 1;
now->tag = 1;
return;
}
push_down(now);
int mid = l + r >> 1;
if (ql <= mid)add(now->lson, ql, qr);
if (qr > mid)add(now->rson, ql, qr);
push_up(now);
}
void del(node* now, int ql, int qr)
{
int l = now->l, r = now->r;
if (l >= ql &&r <= qr)
{
now->val = 0;
now->tag = 0;
return;
}
push_down(now);
int mid = l + r >> 1;
if (ql <= mid)del(now->lson, ql, qr);
if (qr > mid)del(now->rson, ql, qr);
push_up(now);
}
void rev(node* now, int ql, int qr)
{
int l = now->l, r = now->r;
if (l >= ql &&r <= qr)
{
now->val = now->r - now->l + 1-now->val;
now->tag = 2;
return;
}
push_down(now);
int mid = l + r >> 1;
if (ql <= mid)rev(now->lson, ql, qr);
if (qr > mid)rev(now->rson, ql, qr);
push_up(now);
}
int ask(node* now)
{
int l = now->l, r = now->r;
if (l == r)
{
return l;
}
push_down(now);
int mid = l + r >> 1;
int ret = 0;
if (now->lson->val < now->lson->r - now->lson->l + 1)
ret = ask(now->lson);
else
ret = ask(now->rson);
push_up(now);
return ret;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n; cin >> n;
for (int i = 1; i <= n; i++)
{
int op, l, r; cin >> op >> l >> r;
if (op == 1) add(root, l, r);
else if (op == 2) del(root, l, r);
else rev(root, l, r);
cout << ask(root) << '\n';
}
return 0;
}