#include<bits/stdc++.h>
#define ldb long double
#define pll pair<long double,long double>
#define fi first
#define se second
using namespace std;
constexpr int maxn=1e5+10,mo1=39989,mo2=1e9;
constexpr ldb eps=1e-8;
int read()
{
int x=0,f=1;
char ch=getchar();
while (ch<'0' || ch>'9')
{
if (ch == '-') f=-1;
ch=getchar();
}
while (ch>='0' && ch<='9')
{
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
return x*f;
}
int n;
pll lik[maxn];
int id;
void getkb(int A,int B,int C,int D){
if (A>C) swap(A,C),swap(B,D);
id++;
if (C == A) lik[id]={0,max(B,D)};
else lik[id].fi=(ldb)(D-B)/(ldb)(C-A),lik[id].se=(ldb)D-(ldb)C*lik[id].fi;
}
namespace lcsgt
{
#define ls (rt<<1)
#define rs (rt<<1|1)
#define mid ((t[rt].l+t[rt].r)>>1)
struct _ {int l,r,v;}t[maxn<<2];
ldb gety(int id,int x) {return lik[id].fi*(ldb)x+lik[id].se;}
int cmp(int u,int v,int x)
{
if (gety(u,x)-gety(v,x)>eps) return 1;
if (gety(v,x)-gety(u,x)>eps) return 0;
return u<v;
}
void Build(int rt,int l,int r)
{
t[rt].l=l,t[rt].r=r;
if (l == r) return;
Build(ls,l,mid),Build(rs,mid+1,r);
}
void Ins(int rt,int x)
{
if (cmp(x,t[rt].v,t[rt].l) && cmp(x,t[rt].v,t[rt].r))
t[rt].v=x;
if (!cmp(x,t[rt].v,t[rt].l) && !cmp(x,t[rt].v,t[rt].r))
return;
if (cmp(x,t[rt].v,mid))
swap(x,t[rt].v);
if (cmp(x,t[rt].v,t[rt].l))
Ins(ls,x);
if (cmp(x,t[rt].v,t[rt].r))
Ins(rs,x);
}
void Upd(int rt,int L,int R,int x)
{
if (L<=t[rt].l && t[rt].r<=R) return Ins(rt,x),void();
if (L<=mid) Upd(ls,L,R,x);
if (R>mid) Upd(rs,L,R,x);
}
int que(int rt,int x)
{
if (t[rt].l == t[rt].r)
return t[rt].v;
int res=0;
if (x<=mid) res=que(ls,x);
else res=que(rs,x);
if (cmp(t[rt].v,res,x))
res=t[rt].v;
return res;
}
}using namespace lcsgt;
signed main()
{
Build(1,1,mo1);
n=read();
int lans=0;
for (int i=1;i<=n;i++)
{
int op=read();
if (!op)
{
int k=read();
int x=(k+lans-1)%mo1+1;
lans=que(1,x);
printf("%d\n",lans);
}
else
{
int x0=read(),y0=read(),x1=read(),y_1=read();
x0=(x0+lans-1)%mo1+1;
y0=(y0+lans-1)%mo2+1;
x1=(x1+lans-1)%mo1+1;
y_1=(y_1+lans-1)%mo2+1;
getkb(x0,y0,x1,y_1);
// cerr << lik[id].fi << " " << lik[id].se << endl;
// cerr << "---------------------" << endl;
// cerr << x0 << " " << x1 << " " << id << endl;
if (x0>x1) swap(x0,x1);
Upd(1,x0,x1,id);
// for (int i=1;i<=10;i++)
// cerr << que(1,i) << " ";
// cerr << endl;
// cerr << "---------------------" << endl;
}
}
return 0;
}