RT
#8 #11~17RE
#9 #10 WA
#include<bits/stdc++.h>
#define pl p<<1
#define pr p<<1|1
#define tp tr[p]
#define mid (l+r>>1)
#define int __int128
#define pdi pair<double,int>
using namespace std;
const int N=100005;
const int MOD1=39989;
const int MOD2=1e9;
const int inf=0x7f7f7f7f;
const double eps=1e-9;
int n,lastans,cnt;
void read(int &res){res=0;char c=getchar();int f=1;while(c<48||c>57){if(c=='-')f=-1;c=getchar();}while(c>47&&c<58)res=(res<<3)+(res<<1)+(c^48),c=getchar();res*=f;}
void write(int a){if(!a){putchar('0');putchar('\n');return;}if(a<0){putchar('-');a=-a;}int l=0;char c[50];while(a){c[++l]=(a%10)^48;a/=10;}while(l)putchar(c[l--]);putchar('\n');}
struct segm{
double k,b;
int s,e;
double operator()(double x){
if(s<=x&&x<=e)
return k*x+b;
return -inf;
}
}ss[2*N];
int tr[5*MOD1];
int cmp(double a,double b){if(a-b>eps)return 1;if(b-a>eps)return -1;return 0;}
pdi _max(pdi a,pdi b){
if(cmp(a.first,b.first)==1)return a;
if(cmp(a.first,b.first)==-1)return b;
return (a.second<b.second?a:b);
}
void upd(int p,int l,int r,int id){
int bmid=cmp(ss[tp](mid),ss[id](mid));
if(bmid==-1)swap(tp,id);
int br=cmp(ss[tp](r),ss[id](r)),bl=cmp(ss[tp](l),ss[id](l));
if(br==-1||(br==0&&tp>id))upd(pr,mid+1,r,id);
if(bl==-1||(!bl==0&&tp>id))upd(pr,l,mid,id);
}
void update(int p,int l,int r,int L,int R,int id){
if(l>R||r<L)return;
if(L<=l&&r<=R){
upd(p,l,r,id);
return;
}
if(L<=mid)update(pl,l,mid,L,R,id);
if(R>mid)update(pr,mid+1,r,L,R,id);
}
void add(int a,int b,int c,int d){
cnt++;
if(a==c){
ss[cnt].k=0,ss[cnt].b=max(b,d);
ss[cnt].s=ss[cnt].e=a;
update(1,1,MOD1,a,a,cnt);
}else{
ss[cnt].k=((double)(b-d)/(double)(a-c)),ss[cnt].b=(b-ss[cnt].k*a);
ss[cnt].s=min(a,c);ss[cnt].e=max(a,c);
update(1,1,MOD1,min(a,c),max(a,c),cnt);
}
}
pdi query(int p,int x,int l,int r){
//cout<<l<<' '<<mid<<' '<<r<<'\n';
pdi res;
if(tp)res={ss[tp](x),tp};
if(l==r)return res;
if(x<=mid)res=_max(res,query(pl,x,l,mid));
if(x>mid)res=_max(res,query(pr,x,mid+1,r));
return res;
}
signed main(){
read(n);
while(n--){
int op,a,b,c,d;
read(op);
if(op){
read(a);
read(b);
read(c);
read(d);
a=(a+lastans-1)%MOD1+1;
c=(c+lastans-1)%MOD1+1;
b=(b+lastans-1)%MOD2+1;
d=(d+lastans-1)%MOD2+1;
add(a,b,c,d);
}else{
read(a);
a=(a+lastans-1)%MOD1+1;
write(lastans=query(1,a,1,MOD1).second);
}
}
return 0;
}