#include<iostream>
#define ld long double
using namespace std;
const int N = 1e5 + 10;
const int M = 4e4 + 10;
const int V = 4e4;
const ld eps = 1e-9;
struct Line {
ld k, b;
} a[N];
int nn;
struct myPair {
ld v;
int id;
inline myPair(ld _p1 = 0, int _p2 = 0) : v(_p1), id(_p2) {}
inline bool operator<(const myPair &b) const {
if(abs(v - b.v) > eps) return v < b.v;
return id > b.id;
}
};
inline ld calc(int id, int x) {
return a[id].k * x + a[id].b;
}
namespace SegT {
int s[4 * M];
inline int lc(int x) { return x << 1; }
inline int rc(int x) { return x << 1 | 1; }
void move_tag(int p, int l, int r, int id) {
if(!s[p]) {
s[p] = id;
return;
}
int mid = (l + r) >> 1;
if((myPair){calc(s[p], mid), s[p]} < (myPair){calc(id, mid), id}) swap(id, s[p]);
if(l == r) return;
if((myPair){calc(s[p], l), s[p]} < (myPair){calc(id, l), id}) move_tag(lc(p), l, mid, id);
if((myPair){calc(s[p], r), s[p]} < (myPair){calc(id, r), id}) move_tag(rc(p), mid + 1, r, id);
}
void insert(int p, int l, int r, int ql, int qr, int id) {
if(ql <= l && r <= qr) {
move_tag(p, l, r, id);
return;
}
int mid = (l + r) >> 1;
if(ql <= mid) insert(lc(p), l, mid, ql, qr, id);
if(mid < qr) insert(rc(p), mid + 1, r, ql, qr, id);
}
myPair query(int p, int l, int r, int q) {
if(l == r) return (myPair){calc(s[p], q), s[p]};
int mid = (l + r) >> 1;
if(q <= mid) return max((myPair){calc(s[p], q), s[p]}, query(lc(p), l, mid, q));
else return max((myPair){calc(s[p], q), s[p]}, query(rc(p), mid + 1, r, q));
}
}
void insert(int x0, int y0, int x1, int y1) {
++nn;
if(x0 > x1) swap(x0, x1), swap(y0, y1);
if(x0 == x1) {
a[nn].k = 0;
a[nn].b = max(y0, y1);
} else {
a[nn].k = (ld)(y1 - y0) / (x1 - x0);
a[nn].b = y0 - a[nn].k * x0;
}
SegT::insert(1, 1, V, x0, x1, nn);
}
int query(int k) {
return SegT::query(1, 1, V, k).id;
}
int T;
int main() {
const int MOD1 = 39989;
const int MOD2 = 1e9;
int lstans = 0;
cin >> T;
while(T--) {
int op, k, x0, y0, x1, y1;
cin >> op;
if(op == 0) {
cin >> k;
k = (k + lstans - 1 + MOD1) % MOD1 + 1;
cout << (lstans = query(k)) << '\n';
} else {
cin >> x0 >> y0 >> x1 >> y1;
x0 = (x0 + lstans - 1 + MOD1) % MOD1 + 1;
x1 = (x1 + lstans - 1 + MOD1) % MOD1 + 1;
y0 = (y0 + lstans - 1 + MOD2) % MOD2 + 1;
y1 = (y1 + lstans - 1 + MOD2) % MOD2 + 1;
insert(x0, y0, x1, y1);
}
}
return 0;
}