#include <bits/stdc++.h>
using namespace std;
inline long long fast_pow(long long x, long long k) {
  long long ans = 1;
  while (k) {
    if (k & 1) ans = ans * x % 998244353;
    x = x * x % 998244353;
    k >>= 1;
  }
  return ans;
}
inline long long inv(long long x) { return fast_pow(x, 998244353 - 2); }
long long fact[1000 + 5], invfact[1000 + 5], invx[1000 + 5];
void ini_inv(int n) {
  fact[0] = 1;
  for (int i = 1; i <= n; i++) fact[i] = fact[i - 1] * i % 998244353;
  invfact[n] = inv(fact[n]);
  for (int i = n - 1; i >= 0; i--)
    invfact[i] = invfact[i + 1] * (i + 1) % 998244353;
  for (int i = 1; i <= n; i++) {
    invx[i] = invfact[i] * fact[i - 1] % 998244353;
  }
}
inline long long C(long long n, long long m) {
  long long ans = 1;
  for (int i = n; i >= n - m + 1; i--) ans = ans * i % 998244353;
  for (int i = 1; i <= m; i++) ans = ans * invx[i] % 998244353;
  return ans;
}
int n;
struct seg {
  int l;
  int r;
} a[1000 + 5];
int dn = 0;
int tmp[1000 + 5];
void discrete() {
  dn = 0;
  for (int i = 1; i <= n; i++) {
    tmp[++dn] = a[i].l;
    tmp[++dn] = a[i].r + 1;
  }
  sort(tmp + 1, tmp + 1 + dn);
  dn = unique(tmp + 1, tmp + 1 + dn) - tmp - 1;
  for (int i = 1; i <= n; i++) {
    a[i].l = lower_bound(tmp + 1, tmp + 1 + dn, a[i].l) - tmp;
    a[i].r = lower_bound(tmp + 1, tmp + 1 + dn, a[i].r + 1) - tmp;
  }
}
long long dp[1000 + 5][1000 + 5];
long long sum[1000 + 5];
int main() {
  ini_inv(1000);
  scanf("%d", &n);
  long long all = 1;
  for (int i = 1; i <= n; i++) {
    scanf("%d %d", &a[i].l, &a[i].r);
    all = all * (a[i].r - a[i].l + 1) % 998244353;
  }
  discrete();
  for (int j = 1; j <= dn; j++) dp[0][j] = 1;
  for (int i = 1; i <= n; i++) {
    for (int j = a[i].l; j < a[i].r; j++) {
      for (int k = i; k > 0; k--) {
        if (j < a[k].l || j >= a[k].r) break;
        dp[i][j] += dp[k - 1][j + 1] *
                    C(i - k + tmp[j + 1] - tmp[j], i - k + 1) % 998244353;
        dp[i][j] %= 998244353;
      }
    }
    for (int j = dn - 1; j >= 1; j--) {
      dp[i][j] += dp[i][j + 1];
      dp[i][j] %= 998244353;
    }
  }
  printf("%lld\n", dp[n][1] * inv(all) % 998244353);
}
