#include<bits/stdc++.h>
#define int long long
#define ls u<<1
#define rs u<<1|1
#define pii pair<double,int>
using namespace std;
constexpr int N = 1000005;
constexpr double eps = 1e-9;
constexpr int Mod = 39989;
constexpr int mod = 1000000000;
int n;
int cmp(int x , int y) {
if(x - y > eps) return 1;
if(y - x > eps) return -1;
return 0;
}
struct Node {
double k , b;
} a[N];
int s[N];
int cnt;
double num(int id , int x) {
return a[id].b + a[id].k * x;
}
void add(int x0 , int y0 , int x1 , int y1) {
cnt++;
if(x0 == x1) {
a[cnt].k = 0;
a[cnt].b = max(y0 , y1);
} else {
a[cnt].k =1.0 * (y0 - y1) / (x0 - x1);
a[cnt].b = y0 - a[cnt].k * x0;
}
}
void pushup(int u , int l , int r ,int k) {
int &v = s[u];
int mid = (l + r) >> 1;
int mid1 = cmp(num(k,mid) , num(v , mid));
if(mid1 == 1 || (!mid1 && k < v)) swap(k , v);
int l1 = cmp(num(k , l) , num(v , l));
int r1 = cmp(num(k , r) , num(v , r));
if(l1 == 1 || (!l1 && k < v)) pushup(ls , l , mid, k);
if(r1 == 1 || (!r1 && k < v)) pushup(rs , mid + 1 , r , k);
}
void update(int u , int l , int r , int L , int R , int k) {
int mid = (l + r) >> 1;
if(L <= l && r <= R) {
pushup(u , l, r , k);
return ;
}
if(L <= mid) {
update(ls , l , mid , L, R , k);
}
if(R > mid) {
update(rs , mid + 1 , r , L, R , k);
}
}
pii pmax(pii x , pii y) {
if(cmp(x.first , y.first) == -1) {
return y;
} else if(cmp(x.first , y.first) == 1) {
return x;
} else {
x.second < y.second ? x : y;
}
}
pii query(int u , int l , int r , int k) {
if(r < k || l > k) return {0,0};
double res = num(s[u] , k);
int mid = (l + r) >> 1;
if(l == r) {
return {res , s[u]};
}
return pmax({res , s[u]} , pmax(query(ls , l , mid , k) , query(rs , mid + 1 , r , k)));
}
signed main() {
cin >> n;
int ccnt = 0;
int lst = 0;
for(int i = 1 ; i <= n ; i++) {
int op;
scanf("%lld",&op);
if(op == 1) {
int x0 , y0 , x1 , y1;
scanf("%lld%lld%lld%lld" , &x0 , &y0 , &x1 , &y1);
x0 = (x0 + lst - 1 + Mod) % Mod + 1;
x1 = (x1 + lst - 1 + Mod) % Mod + 1;
y0 = (y0 + lst - 1 + mod) % mod + 1;
y1 = (y1 + lst - 1 + mod) % mod + 1;
if(x0 > x1) {
swap(x0 , x1);
swap(y0 , y1);
}
add(x0 , y0 , x1 , y1);
update(1,1 , Mod , x0 , x1 , cnt);
}
else{
int x;
scanf("%lld",&x);
x = (x + lst - 1 + Mod) % Mod + 1;
lst = query(1 , 1 , Mod , x).second;
if(ccnt >= 1){
cout << endl;
}
ccnt++;
printf("%lld" , lst);
}
}
}
