#include using namespace std; const long long N = 2e5 + 5, mod = 998244353; long long n, m, lg[N], sum, f[N], k, ans[N], X, Y, inv[N], inv2; long long D(long long x, long long y) { long long sum = 1; for (; y; y /= 2, x = x * x % mod) { if (y & 1) { sum = sum * x % mod; } } return sum; } long long C(long long n, long long m) { if (n < m) { return 0; } return (f[n] * inv[m] % mod * inv[n - m] % mod) % mod; } struct S { long long x, y, id; } q[N]; bool cmp(S X, S Y) { if (X.x / k == Y.x / k) { return X.y < Y.y; } return X.x < Y.x; } void addx() { sum = (sum * 2ll % mod - C(X, Y) + mod) % mod; X++; } void remx() { sum = (sum + C(X - 1, Y)) % mod * inv2 % mod; X--; } void addy() { sum = (sum + C(X, Y + 1)) % mod; Y++; } void remy() { sum = (sum - C(X, Y) + mod) % mod; Y--; } int main() { f[0] = 1, inv[0] = 1, lg[0] = 1, inv2 = D(2ll, mod - 2) % mod; for (long long i = 1; i <= (long long)2e5; i++) { f[i] = f[i - 1] * i % mod; inv[i] = D(f[i], mod - 2) % mod; lg[i] = lg[i - 1] * 2 % mod; } cin >> n; for (long long i = 1; i <= n; i++) { long long x, y; cin >> x >> y; x--, y--; q[i] = {x, y, i}; } k = sqrt((long long)2e5); sort (q + 1, q + 1 + n, cmp); sum = 1; for (long long i = 1; i <= n; i++) { for (; X < q[i].x; addx()) { } for (; Y > q[i].y; remy()) { } for (; X > q[i].x; remx()) { } for (; Y < q[i].y; addy()) { } ans[q[i].id] = sum % mod * (lg[X + 1] - 1 + mod) % mod; } for (long long i = 1; i <= n; i++) { cout << ans[i] << "\n"; } return 0; }