#include #include using namespace std; using mint = atcoder::modint998244353; int main(){ ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector> a(n); vector ca(2 * n); for(int i = 0; i < n; i++){ auto &&[l, r] = a[i]; cin >> l >> r; l--; ca[2 * i] = l; ca[2 * i + 1] = r; } sort(ca.begin(), ca.end()); ca.erase(unique(ca.begin(), ca.end()), ca.end()); const int m = ca.size(); vector imos(m); for(int i = 0; i < n; i++){ auto &&[l, r] = a[i]; mint div = mint(1) / (r - l); l = lower_bound(ca.begin(), ca.end(), l) - ca.begin(); r = lower_bound(ca.begin(), ca.end(), r) - ca.begin(); if (i == 0) continue; imos[r] += div; imos[l] -= div; } mint ans, sv = 1, div = 998244354 / 2; for(int i = m - 1; i >= a[0].first + 1; i--){ imos[i - 1] += imos[i]; mint len = ca[i] - ca[i - 1]; if(i <= a[0].second) ans += len * (sv + imos[i] * (len - 1) * div); sv += imos[i] * len; } ans /= ca[a[0].second] - ca[a[0].first]; cout << ans.val() << '\n'; }