#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
const int BASE = 1e6 + 3;
const int MOD = 998244353;
int n, q, f[N], p[N];
int fen[N], ma[N], mi[N];
vector<int> L[N];
void add(int &a, int b){
a += b;
if (a >= MOD) a -= MOD;
}
void sub(int &a, int b){
a -= b;
if (a < 0) a += MOD;
}
void update(int x, int val){
for (; x <= n; x += x & -x)
add(fen[x], val);
}
int get(int l, int r){
int res = 0, x = r; --l;
for (; r; r -= r & -r)
add(res, fen[r]);
for (; l; l -= l & -l)
sub(res, fen[l]);
return (res * 1LL * f[n - x]) % MOD;
}
void mer(int u, int v){
u = p[u]; v = p[v];
if (u == v) return;
if ((int)L[u].size() < (int)L[v].size()) swap(u, v);
ma[u] = max(ma[u], ma[v]);
mi[u] = min(mi[u], mi[v]);
for (int x: L[v]){
p[x] = u;
update(x, f[x] * 1LL * ((u - v + MOD) % MOD) % MOD);
L[u].push_back(x);
}
L[v].clear();
}
void DnC(int l, int r, int u, int v){
if (l == r){
mer(l, u);
return;
}
if (get(l, r) == get(u, v)) return;
int mid1 = l + ((r - l) >> 1), mid2 = u + ((v - u) >> 1);
DnC(l, mid1, u, mid2);
DnC(mid1 + 1, r, mid2 + 1, v);
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n >> q; f[0] = 1;
for (int i = 1; i <= n; ++i) {
L[p[i] = ma[i] = mi[i] = i].push_back(i);
f[i] = f[i - 1] * 1LL * BASE % MOD;
update(i, f[i] * 1LL * i % MOD);
}
while (q--){
int t; cin >> t;
if (t == 1){
int x; cin >> x;
x = p[x];
cout << mi[x] << " " << ma[x] << "\n";
} else {
int l, r, x; cin >> l >> r >> x;
DnC(l, l + x - 1, r, r + x - 1);
}
}
}