#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1111;
const ll M = 1e9 + 9999;
int n;
ll L[N+5], R[N+5], fact[N+5], ifact[N+5];
inline ll add(ll a, ll b) { a += b; return (a >= M) ? a - M : a; }
inline ll sub(ll a, ll b) { a -= b; return (a < 0) ? a + M : a; }
inline ll mul(ll a, ll b) { return (__int128)a * b % M; }
ll pw(ll x, ll n) {
ll a = 1;
x %= M;
for (; n; n >>= 1, x = mul(x, x))
if (n & 1) a = mul(a, x);
return a;
}
ll inv(ll x) { return pw(x, M - 2); }
void precompute(int n) {
fact[0] = 1;
for (int i = 1; i <= n; i++)
fact[i] = mul(fact[i - 1], i);
ifact[n] = inv(fact[n]);
for (int i = n; i > 0; i--)
ifact[i - 1] = mul(ifact[i], i);
}
ll lagrange(const vector<ll>& y, ll n) {
int k = (int)y.size() - 1;
if (n <= k) return y[n];
static ll p[N+5], s[N+5];
p[0] = 1;
for (int i = 0; i <= k; i++)
p[i + 1] = mul(p[i], sub(n, i));
s[k + 1] = 1;
for (int i = k; i >= 0; i--)
s[i] = mul(s[i + 1], sub(n, i));
ll ans = 0;
for (int i = 0; i <= k; i++) {
ll num = mul(p[i], s[i + 1]), den = mul(ifact[i], ifact[k - i]);
ll term = mul(y[i], mul(num, den));
if ((k - i) & 1) ans = sub(ans, term);
else ans = add(ans, term);
}
return ans;
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n;
precompute(n + 1);
for (int i = 0; i < n; i++)
cin >> L[i] >> R[i];
vector<ll> pts;
for (int i = 0; i < n; i++) {
pts.push_back(L[i]);
pts.push_back(R[i] + 1);
}
sort(pts.begin(), pts.end());
pts.erase(unique(pts.begin(), pts.end()), pts.end());
ll ans = 0;
for (int id = 0; id < (int)pts.size() - 1; id++) {
ll l = pts[id], r = pts[id + 1] - 1;
if (l > r) continue;
vector<int> active;
ll base = 1;
bool skip = false;
for (int i = 0; i < n; i++)
if (R[i] < l) base = mul(base, R[i] - L[i] + 1);
else if (L[i] > r) {
skip = true;
break;
} else active.push_back(i);
if (skip) continue;
int deg = active.size();
int K = deg + 1;
vector<ll> T(K + 1), A(K + 1);
for (int x = 0; x <= K; x++) {
ll val = base;
for (int idx : active)
val = mul(val, x + l - L[idx]);
A[x] = val;
}
T[0] = 0;
for (int x = 1; x <= K; x++) {
ll w = mul(x + l - 1, sub(A[x], A[x - 1]));
T[x] = add(T[x - 1], w);
}
ans = add(ans, lagrange(T, r - l + 1));
}
cout << ans << "\n";
cerr << "TIME: " << 1.0 * clock() / CLOCKS_PER_SEC << " s\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKCmNvbnN0IGludCBOID0gMTExMTsKY29uc3QgbGwgTSA9IDFlOSArIDk5OTk7CgppbnQgbjsKbGwgTFtOKzVdLCBSW04rNV0sIGZhY3RbTis1XSwgaWZhY3RbTis1XTsKCmlubGluZSBsbCBhZGQobGwgYSwgbGwgYikgeyBhICs9IGI7IHJldHVybiAoYSA+PSBNKSA/IGEgLSBNIDogYTsgfQppbmxpbmUgbGwgc3ViKGxsIGEsIGxsIGIpIHsgYSAtPSBiOyByZXR1cm4gKGEgPCAwKSA/IGEgKyBNIDogYTsgfQppbmxpbmUgbGwgbXVsKGxsIGEsIGxsIGIpIHsgcmV0dXJuIChfX2ludDEyOClhICogYiAlIE07IH0KCmxsIHB3KGxsIHgsIGxsIG4pIHsKICAgIGxsIGEgPSAxOwogICAgeCAlPSBNOwogICAgZm9yICg7IG47IG4gPj49IDEsIHggPSBtdWwoeCwgeCkpCiAgICAgICAgaWYgKG4gJiAxKSBhID0gbXVsKGEsIHgpOwogICAgcmV0dXJuIGE7Cn0KCmxsIGludihsbCB4KSB7IHJldHVybiBwdyh4LCBNIC0gMik7IH0KCnZvaWQgcHJlY29tcHV0ZShpbnQgbikgewogICAgZmFjdFswXSA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgZmFjdFtpXSA9IG11bChmYWN0W2kgLSAxXSwgaSk7CiAgICBpZmFjdFtuXSA9IGludihmYWN0W25dKTsKICAgIGZvciAoaW50IGkgPSBuOyBpID4gMDsgaS0tKQogICAgICAgIGlmYWN0W2kgLSAxXSA9IG11bChpZmFjdFtpXSwgaSk7Cn0KCmxsIGxhZ3JhbmdlKGNvbnN0IHZlY3RvcjxsbD4mIHksIGxsIG4pIHsKICAgIGludCBrID0gKGludCl5LnNpemUoKSAtIDE7CiAgICBpZiAobiA8PSBrKSByZXR1cm4geVtuXTsKCiAgICBzdGF0aWMgbGwgcFtOKzVdLCBzW04rNV07CiAgICBwWzBdID0gMTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGs7IGkrKykKICAgICAgICBwW2kgKyAxXSA9IG11bChwW2ldLCBzdWIobiwgaSkpOwogICAgc1trICsgMV0gPSAxOwogICAgZm9yIChpbnQgaSA9IGs7IGkgPj0gMDsgaS0tKQogICAgICAgIHNbaV0gPSBtdWwoc1tpICsgMV0sIHN1YihuLCBpKSk7CgogICAgbGwgYW5zID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGs7IGkrKykgewogICAgICAgIGxsIG51bSA9IG11bChwW2ldLCBzW2kgKyAxXSksIGRlbiA9IG11bChpZmFjdFtpXSwgaWZhY3RbayAtIGldKTsKICAgICAgICBsbCB0ZXJtID0gbXVsKHlbaV0sIG11bChudW0sIGRlbikpOwogICAgICAgIGlmICgoayAtIGkpICYgMSkgYW5zID0gc3ViKGFucywgdGVybSk7CiAgICAgICAgZWxzZSBhbnMgPSBhZGQoYW5zLCB0ZXJtKTsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KCmludCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOwoKICAgIGNpbiA+PiBuOwogICAgcHJlY29tcHV0ZShuICsgMSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICBjaW4gPj4gTFtpXSA+PiBSW2ldOwoKICAgIHZlY3RvcjxsbD4gcHRzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBwdHMucHVzaF9iYWNrKExbaV0pOwogICAgICAgIHB0cy5wdXNoX2JhY2soUltpXSArIDEpOwogICAgfQogICAgc29ydChwdHMuYmVnaW4oKSwgcHRzLmVuZCgpKTsKICAgIHB0cy5lcmFzZSh1bmlxdWUocHRzLmJlZ2luKCksIHB0cy5lbmQoKSksIHB0cy5lbmQoKSk7CgogICAgbGwgYW5zID0gMDsKICAgIGZvciAoaW50IGlkID0gMDsgaWQgPCAoaW50KXB0cy5zaXplKCkgLSAxOyBpZCsrKSB7CiAgICAgICAgbGwgbCA9IHB0c1tpZF0sIHIgPSBwdHNbaWQgKyAxXSAtIDE7ICAgIAogICAgICAgIGlmIChsID4gcikgY29udGludWU7CiAgICAKICAgICAgICB2ZWN0b3I8aW50PiBhY3RpdmU7CiAgICAgICAgbGwgYmFzZSA9IDE7CiAgICAgICAgYm9vbCBza2lwID0gZmFsc2U7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgICAgICBpZiAoUltpXSA8IGwpIGJhc2UgPSBtdWwoYmFzZSwgUltpXSAtIExbaV0gKyAxKTsKICAgICAgICAgICAgZWxzZSBpZiAoTFtpXSA+IHIpIHsKICAgICAgICAgICAgICAgIHNraXAgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0gZWxzZSBhY3RpdmUucHVzaF9iYWNrKGkpOwoKICAgICAgICBpZiAoc2tpcCkgY29udGludWU7CgogICAgICAgIGludCBkZWcgPSBhY3RpdmUuc2l6ZSgpOwogICAgICAgIGludCBLID0gZGVnICsgMTsKICAgICAgICB2ZWN0b3I8bGw+IFQoSyArIDEpLCBBKEsgKyAxKTsKICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8PSBLOyB4KyspIHsKICAgICAgICAgICAgbGwgdmFsID0gYmFzZTsKICAgICAgICAgICAgZm9yIChpbnQgaWR4IDogYWN0aXZlKQogICAgICAgICAgICAgICAgdmFsID0gbXVsKHZhbCwgeCArIGwgLSBMW2lkeF0pOwogICAgICAgICAgICBBW3hdID0gdmFsOwogICAgICAgIH0KCiAgICAgICAgVFswXSA9IDA7CiAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPD0gSzsgeCsrKSB7CiAgICAgICAgICAgIGxsIHcgPSBtdWwoeCArIGwgLSAxLCBzdWIoQVt4XSwgQVt4IC0gMV0pKTsKICAgICAgICAgICAgVFt4XSA9IGFkZChUW3ggLSAxXSwgdyk7CiAgICAgICAgfQoKICAgICAgICBhbnMgPSBhZGQoYW5zLCBsYWdyYW5nZShULCByIC0gbCArIDEpKTsKICAgIH0KCiAgICBjb3V0IDw8IGFucyA8PCAiXG4iOwoKICAgIGNlcnIgPDwgIlRJTUU6ICIgPDwgMS4wICogY2xvY2soKSAvIENMT0NLU19QRVJfU0VDIDw8ICIgc1xuIjsKICAgIHJldHVybiAwOwp9Cg==