#include #include #include using namespace std; using LL = long long; const LL kMaxN = 2e5 + 5, kMod = 998244353; struct { LL n, m, id; } a[kMaxN]; LL ans[kMaxN], f[kMaxN], inv[kMaxN], q, len, res; LL ksm(LL a, LL b) { LL res = 1; for (; b; b /= 2) { b % 2 && (res = res * a % kMod); a = a * a % kMod; } return res; } void init() { f[0] = inv[0] = 1; for (LL i = 1; i <= 2e5; i++) { inv[i] = ksm(f[i] = f[i - 1] * i % kMod, kMod - 2); } } LL C(LL n, LL m) { if (n < m) { return 0; } return f[n] * inv[m] % kMod * inv[n - m] % kMod; } void addn(LL n, LL m) { res = ((res * 2 - C(n - 1, m)) % kMod + kMod) % kMod; } void deln(LL n, LL m) { res = (res + C(n - 1, m)) % kMod * inv[2] % kMod; } void addm(LL n, LL m) { res = (res + C(n, m)) % kMod; } void delm(LL n, LL m) { res = ((res - C(n, m)) % kMod + kMod) % kMod; } int main() { init(); cin >> q; len = pow(q, 2.0 / 3.0); for (LL i = 1; i <= q; i++) { cin >> a[i].n >> a[i].m; a[i].n--, a[i].m--; a[i].id = i; } sort(a + 1, a + q + 1, [](auto a, auto b) { return a.n / len != b.n / len ? a.n < b.n : a.m < b.m; }); res = 1; for (LL i = 1, n = 0, m = 0; i <= q; i++) { for (; n > a[i].n; deln(n--, m)) { } for (; m > a[i].m; delm(n, m--)) { } for (; m < a[i].m; addm(n, ++m)) { } for (; n < a[i].n; addn(++n, m)) { } ans[a[i].id] = res * (ksm(2, n + 1) - 1) % kMod; } for (LL i = 1; i <= q; i++) { cout << ans[i] << '\n'; } return 0; }