#include <bits/stdc++.h>
#define all(v) v.begin(),v.end()
using namespace std;
#define ll long long
const int N = 5e5 + 10;
const double EPS = 1e-9;
const double PI = acos(-1);
#define MAX 1000007
#define ld long double
#define INF 3e9
//#define endl '\n'
const ll mod1 = 17, mod2 = 5882353;
ll fst(ll a, ll b, ll mod){
a = (a % mod + mod) % mod;
ll res = 1;
while(b){
if(b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
using T = __int128;
// ax + by = __gcd(a, b)
// returns __gcd(a, b)
T extended_euclid(T a, T b, T &x, T &y) {
T xx = y = 0;
T yy = x = 1;
while (b) {
T q = a / b;
T t = b; b = a % b; a = t;
t = xx; xx = x - q * xx; x = t;
t = yy; yy = y - q * yy; y = t;
}
return a;
}
// finds x such that x % m1 = a1, x % m2 = a2. m1 and m2 may not be coprime
// here, x is unique modulo m = lcm(m1, m2). returns (x, m). on failure, m = -1.
pair<T, T> CRT(T a1, T m1, T a2, T m2) {
T p, q;
T g = extended_euclid(m1, m2, p, q);
if (a1 % g != a2 % g) return make_pair(0, -1);
T m = m1 / g * m2;
p = (p % m + m) % m;
q = (q % m + m) % m;
return make_pair((p * a2 % m * (m1 / g) % m + q * a1 % m * (m2 / g) % m) % m, m);
}
struct SegTree{
vector<ll> mul, add, base;
ll mod;
int n;
SegTree(int n) : n(n), mul(2*n, 1), add(2*n), base(n){}
void build(vector<ll> &b){
for (int i = 0; i < b.size(); ++i) {
base[i] = (b[i] % mod + mod) % mod;
}
}
void apply(int idx, ll m0, ll a0){
add[idx] = (add[idx] * m0 % mod + a0) % mod;
mul[idx] = (mul[idx] * m0) % mod;
}
void push(int idx, int l, int r){
if(add[idx] != 0 || mul[idx] != 1){
int mid = (l + r) / 2;
apply(idx + 1, mul[idx], add[idx]);
apply(idx + 2 * (mid - l + 1), mul[idx], add[idx]);
add[idx] = 0, mul[idx] = 1;
}
}
void upd(int idx, int tl, int tr, int l, int r, ll m0, ll a0){
if(tl > r || tr < l) return;
if(tl >= l && tr <= r){
apply(idx, m0, a0);
return;
}
push(idx, tl, tr);
int mid = (tl + tr) / 2;
upd(idx + 1, tl, mid, l, r, m0, a0);
upd(idx + 2 * (mid - tl + 1), mid + 1, tr, l, r, m0, a0);
}
ll query(int idx, int l, int r, int pos){
if(l == r){
return (base[l] * mul[idx] % mod + add[idx]) % mod;
}
push(idx, l, r);
int mid = (l + r) / 2;
if(pos <= mid) return query(idx + 1, l, mid, pos);
return query(idx + 2 * (mid - l + 1), mid + 1, r, pos);
}
};
void sol() {
int g; cin >> g;
SegTree a(g), b(g);
a.mod = mod1, b.mod = mod2;
vector<ll> v(g + 1);
int curr_sz = 0;
int sz = g;
int j = 0;
vector<vector<ll>> qt(g);
vector<ll> base;
for (int i = 0; i < g; ++i) {
int t; cin >> t;
if(t == 3){
ll p, q; cin >> p >> q;
qt[i] = {t, p, q};
} else{
ll x; cin >> x;
qt[i] = {t, x};
if(t == 1){
base.push_back(x);
}
}
}
a.build(base), b.build(base);
for(int i = 0; i < g; ++i){
int t = qt[i][0];
if(t == 2){
ll x = qt[i][1];
ll x1 = (x % mod1 + mod1) % mod1;
ll x2 = (x % mod2 + mod2) % mod2;
a.upd(1, 0, sz - 1, 0, curr_sz - 1, 1, x1);
b.upd(1, 0, sz - 1, 0, curr_sz - 1, 1, x2);
} else if(t == 3){
ll p = qt[i][1], q = qt[i][2];
ll q1 = fst(q, mod1 - 2, mod1), q2 = fst(q, mod2 - 2, mod2);
ll p1 = (p % mod1 + mod1) % mod1, p2 = (p % mod2 + mod2) % mod2;
a.upd(1, 0, sz - 1, 0, curr_sz - 1, p1 * q1 % mod1, 0);
b.upd(1, 0, sz - 1, 0, curr_sz - 1, p2 * q2 % mod2, 0);
} else if(t == 1){
v[j] = curr_sz;
curr_sz++;
} else{
int p = qt[i][1]; p--;
ll v1 = a.query(1, 0, sz - 1, v[p]), v2 = b.query(1, 0, sz - 1, v[p]);
cout << (ll)CRT(v1, mod1, v2, mod2).first << '\n';
}
++j;
}
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t = 1;
// cin >> t;
while (t--) {
sol();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lICBhbGwodikgdi5iZWdpbigpLHYuZW5kKCkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcKY29uc3QgaW50IE4gPSA1ZTUgKyAxMDsKY29uc3QgZG91YmxlIEVQUyA9IDFlLTk7CmNvbnN0IGRvdWJsZSBQSSA9IGFjb3MoLTEpOwojZGVmaW5lIE1BWCAxMDAwMDA3CiNkZWZpbmUgIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgSU5GIDNlOQovLyNkZWZpbmUgIGVuZGwgICdcbicKCmNvbnN0IGxsIG1vZDEgPSAxNywgbW9kMiA9IDU4ODIzNTM7CgpsbCBmc3QobGwgYSwgbGwgYiwgbGwgbW9kKXsKICAgIGEgID0gKGEgJSBtb2QgKyBtb2QpICUgbW9kOwogICAgbGwgcmVzID0gMTsKICAgIHdoaWxlKGIpewogICAgICAgIGlmKGIgJiAxKSByZXMgPSByZXMgKiBhICUgbW9kOwogICAgICAgIGEgPSBhICogYSAlIG1vZDsKICAgICAgICBiID4+PSAxOwogICAgfQogICAgcmV0dXJuIHJlczsKfQp1c2luZyBUID0gX19pbnQxMjg7Ci8vIGF4ICsgYnkgPSBfX2djZChhLCBiKQovLyByZXR1cm5zIF9fZ2NkKGEsIGIpClQgZXh0ZW5kZWRfZXVjbGlkKFQgYSwgVCBiLCBUICZ4LCBUICZ5KSB7CiAgICBUIHh4ID0geSA9IDA7CiAgICBUIHl5ID0geCA9IDE7CiAgICB3aGlsZSAoYikgewogICAgICAgIFQgcSA9IGEgLyBiOwogICAgICAgIFQgdCA9IGI7IGIgPSBhICUgYjsgYSA9IHQ7CiAgICAgICAgdCA9IHh4OyB4eCA9IHggLSBxICogeHg7IHggPSB0OwogICAgICAgIHQgPSB5eTsgeXkgPSB5IC0gcSAqIHl5OyB5ID0gdDsKICAgIH0KICAgIHJldHVybiBhOwp9Ci8vIGZpbmRzIHggc3VjaCB0aGF0IHggJSBtMSA9IGExLCB4ICUgbTIgPSBhMi4gbTEgYW5kIG0yIG1heSBub3QgYmUgY29wcmltZQovLyBoZXJlLCB4IGlzIHVuaXF1ZSBtb2R1bG8gbSA9IGxjbShtMSwgbTIpLiByZXR1cm5zICh4LCBtKS4gb24gZmFpbHVyZSwgbSA9IC0xLgpwYWlyPFQsIFQ+IENSVChUIGExLCBUIG0xLCBUIGEyLCBUIG0yKSB7CiAgICBUIHAsIHE7CiAgICBUIGcgPSBleHRlbmRlZF9ldWNsaWQobTEsIG0yLCBwLCBxKTsKICAgIGlmIChhMSAlIGcgIT0gYTIgJSBnKSByZXR1cm4gbWFrZV9wYWlyKDAsIC0xKTsKICAgIFQgbSA9IG0xIC8gZyAqIG0yOwogICAgcCA9IChwICUgbSArIG0pICUgbTsKICAgIHEgPSAocSAlIG0gKyBtKSAlIG07CiAgICByZXR1cm4gbWFrZV9wYWlyKChwICogYTIgJSBtICogKG0xIC8gZykgJSBtICsgcSAqIGExICUgbSAqIChtMiAvIGcpICUgbSkgJSAgbSwgbSk7Cn0KCnN0cnVjdCBTZWdUcmVlewogICAgdmVjdG9yPGxsPiBtdWwsIGFkZCwgYmFzZTsKICAgIGxsIG1vZDsKICAgIGludCBuOwogICAgU2VnVHJlZShpbnQgbikgOiBuKG4pLCBtdWwoMipuLCAxKSwgYWRkKDIqbiksIGJhc2Uobil7fQogICAgdm9pZCBidWlsZCh2ZWN0b3I8bGw+ICZiKXsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGIuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgYmFzZVtpXSA9IChiW2ldICUgbW9kICsgbW9kKSAlIG1vZDsKICAgICAgICB9CiAgICB9CiAgICB2b2lkIGFwcGx5KGludCBpZHgsIGxsIG0wLCBsbCBhMCl7CiAgICAgICAgYWRkW2lkeF0gPSAoYWRkW2lkeF0gKiBtMCAlIG1vZCArIGEwKSAlIG1vZDsKICAgICAgICBtdWxbaWR4XSA9IChtdWxbaWR4XSAqIG0wKSAlIG1vZDsKICAgIH0KICAgIHZvaWQgcHVzaChpbnQgaWR4LCBpbnQgbCwgaW50IHIpewogICAgICAgIGlmKGFkZFtpZHhdICE9IDAgfHwgbXVsW2lkeF0gIT0gMSl7CiAgICAgICAgICAgIGludCBtaWQgPSAobCArIHIpIC8gMjsKICAgICAgICAgICAgYXBwbHkoaWR4ICsgMSwgbXVsW2lkeF0sIGFkZFtpZHhdKTsKICAgICAgICAgICAgYXBwbHkoaWR4ICsgMiAqIChtaWQgLSBsICsgMSksIG11bFtpZHhdLCBhZGRbaWR4XSk7CiAgICAgICAgICAgIGFkZFtpZHhdID0gMCwgbXVsW2lkeF0gPSAxOwogICAgICAgIH0KICAgIH0KICAgIHZvaWQgdXBkKGludCBpZHgsIGludCB0bCwgaW50IHRyLCBpbnQgbCwgaW50IHIsIGxsIG0wLCBsbCBhMCl7CiAgICAgICAgaWYodGwgPiByIHx8IHRyIDwgbCkgcmV0dXJuOwogICAgICAgIGlmKHRsID49IGwgJiYgdHIgPD0gcil7CiAgICAgICAgICAgIGFwcGx5KGlkeCwgbTAsIGEwKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBwdXNoKGlkeCwgdGwsIHRyKTsKICAgICAgICBpbnQgbWlkID0gKHRsICsgdHIpIC8gMjsKICAgICAgICB1cGQoaWR4ICsgMSwgdGwsIG1pZCwgbCwgciwgbTAsIGEwKTsKICAgICAgICB1cGQoaWR4ICsgMiAqIChtaWQgLSB0bCArIDEpLCBtaWQgKyAxLCB0ciwgbCwgciwgbTAsIGEwKTsKICAgIH0KICAgIGxsIHF1ZXJ5KGludCBpZHgsIGludCBsLCBpbnQgciwgaW50IHBvcyl7CiAgICAgICAgaWYobCA9PSByKXsKICAgICAgICAgICAgcmV0dXJuIChiYXNlW2xdICogbXVsW2lkeF0gJSBtb2QgKyBhZGRbaWR4XSkgJSBtb2Q7CiAgICAgICAgfQogICAgICAgIHB1c2goaWR4LCBsLCByKTsKICAgICAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CiAgICAgICAgaWYocG9zIDw9IG1pZCkgcmV0dXJuIHF1ZXJ5KGlkeCArIDEsIGwsIG1pZCwgcG9zKTsKICAgICAgICByZXR1cm4gcXVlcnkoaWR4ICsgMiAqIChtaWQgLSBsICsgMSksIG1pZCArIDEsIHIsIHBvcyk7CiAgICB9Cn07CnZvaWQgc29sKCkgewogICAgaW50IGc7IGNpbiA+PiBnOwoKICAgIFNlZ1RyZWUgYShnKSwgYihnKTsKICAgIGEubW9kID0gbW9kMSwgYi5tb2QgPSBtb2QyOwogICAgdmVjdG9yPGxsPiB2KGcgKyAxKTsKICAgIGludCBjdXJyX3N6ID0gMDsKICAgIGludCBzeiA9IGc7CiAgICBpbnQgaiA9IDA7CiAgICB2ZWN0b3I8dmVjdG9yPGxsPj4gcXQoZyk7CiAgICB2ZWN0b3I8bGw+IGJhc2U7CgoKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGc7ICsraSkgewogICAgICAgIGludCB0OyBjaW4gPj4gdDsKICAgICAgICBpZih0ID09IDMpewogICAgICAgICAgICBsbCBwLCBxOyBjaW4gPj4gcCA+PiBxOwogICAgICAgICAgICBxdFtpXSA9IHt0LCBwLCBxfTsKICAgICAgICB9IGVsc2V7CiAgICAgICAgICAgIGxsIHg7IGNpbiA+PiB4OwogICAgICAgICAgICBxdFtpXSA9IHt0LCB4fTsKICAgICAgICAgICAgaWYodCA9PSAxKXsKICAgICAgICAgICAgICAgIGJhc2UucHVzaF9iYWNrKHgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgYS5idWlsZChiYXNlKSwgYi5idWlsZChiYXNlKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnOyArK2kpewogICAgICAgIGludCB0ID0gcXRbaV1bMF07CiAgICAgICAgaWYodCA9PSAyKXsKICAgICAgICAgICAgbGwgeCA9IHF0W2ldWzFdOwogICAgICAgICAgICBsbCB4MSA9ICh4ICUgbW9kMSArIG1vZDEpICUgbW9kMTsKICAgICAgICAgICAgbGwgeDIgPSAoeCAlIG1vZDIgKyBtb2QyKSAlIG1vZDI7CiAgICAgICAgICAgIGEudXBkKDEsIDAsIHN6IC0gMSwgMCwgY3Vycl9zeiAtIDEsIDEsIHgxKTsKICAgICAgICAgICAgYi51cGQoMSwgMCwgc3ogLSAxLCAwLCBjdXJyX3N6IC0gMSwgMSwgeDIpOwoKICAgICAgICB9IGVsc2UgaWYodCA9PSAzKXsKICAgICAgICAgICAgbGwgcCA9IHF0W2ldWzFdLCBxID0gcXRbaV1bMl07CiAgICAgICAgICAgIGxsIHExID0gZnN0KHEsIG1vZDEgLSAyLCBtb2QxKSwgcTIgPSBmc3QocSwgbW9kMiAtIDIsIG1vZDIpOwogICAgICAgICAgICBsbCBwMSA9IChwICUgbW9kMSArIG1vZDEpICUgbW9kMSwgcDIgPSAocCAlIG1vZDIgKyBtb2QyKSAlIG1vZDI7CiAgICAgICAgICAgIGEudXBkKDEsIDAsIHN6IC0gMSwgMCwgY3Vycl9zeiAtIDEsIHAxICogcTEgJSBtb2QxLCAwKTsKICAgICAgICAgICAgYi51cGQoMSwgMCwgc3ogLSAxLCAwLCBjdXJyX3N6IC0gMSwgcDIgKiBxMiAlIG1vZDIsIDApOwogICAgICAgIH0gZWxzZSBpZih0ID09IDEpewogICAgICAgICAgICB2W2pdID0gY3Vycl9zejsKICAgICAgICAgICAgY3Vycl9zeisrOwogICAgICAgIH0gZWxzZXsKICAgICAgICAgICAgaW50IHAgPSBxdFtpXVsxXTsgcC0tOwogICAgICAgICAgICBsbCB2MSA9IGEucXVlcnkoMSwgMCwgc3ogLSAxLCB2W3BdKSwgdjIgPSBiLnF1ZXJ5KDEsIDAsIHN6IC0gMSwgdltwXSk7CiAgICAgICAgICAgIGNvdXQgPDwgKGxsKUNSVCh2MSwgbW9kMSwgdjIsIG1vZDIpLmZpcnN0IDw8ICdcbic7CiAgICAgICAgfQogICAgICAgICsrajsKICAgIH0KfQoKc2lnbmVkIG1haW4oKSB7CgogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgaW50IHQgPSAxOwovLyAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2woKTsKICAgIH0KCn0=