#include <bits/stdc++.h>
using namespace std;
#define TASK ""
#define ll long long
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pb push_back
#define fi first
#define se second
#define REP(i, n) for (int i = 1, _n = (n); i <= _n; i++)
#define REV(i, n) for (int i = (n); i >= 1; i--)
#define FOR(i, k, n) for (int i = (k), _n = (n); i <= _n; i++)
#define FOV(i, k, n) for (int i = (n), _n = (k); i >= _n; i--)
#define MASK(k) (1LL << (k))
#define BIT(i, n) (((n) >> ((i) - 1)) & 1)
#define OFF(i, n) ((n) & ~MASK((i) - 1))
#define ON(i, n) ((n) | MASK((i) - 1))
#define NUM_BIT(n) (__builtin_popcountll(n))
const int MAXN = 5e3 + 26;
const int MOD = 1e9 + 7;
int n, x, y, res, b[MAXN], bit[MAXN], gpar[MAXN], lpar[MAXN];
pii p[MAXN];
vector<int> Y;
void make_set() {
REP(i, n) bit[i] = 0;
FOR(i, 0, n + 1) gpar[i] = lpar[i] = i;
}
int find_set(int u, int par[]) {
return u == par[u] ? u : par[u] = find_set(par[u], par);
}
int upper(int y) {
int pos = find_set(y + 1, gpar);
if (pos == n + 1) return -1;
return Y[pos - 1];
}
int lower(int y) {
int pos = find_set(y - 1, lpar);
if (pos == 0) return -1;
return Y[pos - 1];
}
void del(int y) {
gpar[y] = y + 1;
lpar[y] = y - 1;
}
void upd(int u, int v) {
for (; u <= n; u += u & -u) bit[u] += v;
}
int get(int u) {
int ans = 0;
for (; u; u -= u & -u) ans += bit[u];
return ans;
}
void add(int &a, int b) {
a += b;
if (a >= MOD) a -= MOD;
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n;
REP(i, n) {
cin >> x >> y;
p[i] = {x, y};
Y.push_back(y);
}
sort(p + 1, p + n + 1);
sort(Y.begin(), Y.end());
REP(i, n) b[i] = lower_bound(Y.begin(), Y.end(), p[i].se) - Y.begin() + 1;
REP(i, n - 1) {
make_set();
REP(j, i - 1) del(b[j]);
FOR(j, i + 1, n) upd(b[j], 1);
FOV(j, i + 1, n) {
upd(b[j], -1);
int mi = min(b[i], b[j]);
int mx = max(b[i], b[j]);
if (get(mx) - get(mi - 1) > 0) {
del(b[j]);
continue;
}
int y = lower(mi);
int v = upper(mx);
if (y == -1 || v == -1) {
del(b[j]);
continue;
}
int delta = 1LL * (p[j].fi - p[i].fi - 1) * (v - y - 1) % MOD;
add(res, delta);
del(b[j]);
}
}
cout << res;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIFRBU0sgIiIKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBwaWkgcGFpcjxpbnQsIGludD4KI2RlZmluZSBwbGwgcGFpcjxsbCwgbGw+CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBSRVAoaSwgbikgZm9yIChpbnQgaSA9IDEsIF9uID0gKG4pOyBpIDw9IF9uOyBpKyspCiNkZWZpbmUgUkVWKGksIG4pIGZvciAoaW50IGkgPSAobik7IGkgPj0gMTsgaS0tKQojZGVmaW5lIEZPUihpLCBrLCBuKSBmb3IgKGludCBpID0gKGspLCBfbiA9IChuKTsgaSA8PSBfbjsgaSsrKQojZGVmaW5lIEZPVihpLCBrLCBuKSBmb3IgKGludCBpID0gKG4pLCBfbiA9IChrKTsgaSA+PSBfbjsgaS0tKQojZGVmaW5lIE1BU0soaykgKDFMTCA8PCAoaykpCiNkZWZpbmUgQklUKGksIG4pICgoKG4pID4+ICgoaSkgLSAxKSkgJiAxKQojZGVmaW5lIE9GRihpLCBuKSAoKG4pICYgfk1BU0soKGkpIC0gMSkpCiNkZWZpbmUgT04oaSwgbikgKChuKSB8IE1BU0soKGkpIC0gMSkpCiNkZWZpbmUgTlVNX0JJVChuKSAoX19idWlsdGluX3BvcGNvdW50bGwobikpCgpjb25zdCBpbnQgTUFYTiA9IDVlMyArIDI2Owpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKaW50IG4sIHgsIHksIHJlcywgYltNQVhOXSwgYml0W01BWE5dLCBncGFyW01BWE5dLCBscGFyW01BWE5dOwpwaWkgcFtNQVhOXTsKdmVjdG9yPGludD4gWTsKCnZvaWQgbWFrZV9zZXQoKSB7CiAgICBSRVAoaSwgbikgYml0W2ldID0gMDsKICAgIEZPUihpLCAwLCBuICsgMSkgZ3BhcltpXSA9IGxwYXJbaV0gPSBpOwp9CgppbnQgZmluZF9zZXQoaW50IHUsIGludCBwYXJbXSkgewogICAgcmV0dXJuIHUgPT0gcGFyW3VdID8gdSA6IHBhclt1XSA9IGZpbmRfc2V0KHBhclt1XSwgcGFyKTsKfQoKaW50IHVwcGVyKGludCB5KSB7CiAgICBpbnQgcG9zID0gZmluZF9zZXQoeSArIDEsIGdwYXIpOwogICAgaWYgKHBvcyA9PSBuICsgMSkgcmV0dXJuIC0xOwogICAgcmV0dXJuIFlbcG9zIC0gMV07Cn0KCmludCBsb3dlcihpbnQgeSkgewogICAgaW50IHBvcyA9IGZpbmRfc2V0KHkgLSAxLCBscGFyKTsKICAgIGlmIChwb3MgPT0gMCkgcmV0dXJuIC0xOwogICAgcmV0dXJuIFlbcG9zIC0gMV07Cn0KCnZvaWQgZGVsKGludCB5KSB7CiAgICBncGFyW3ldID0geSArIDE7CiAgICBscGFyW3ldID0geSAtIDE7Cn0KCnZvaWQgdXBkKGludCB1LCBpbnQgdikgewogICAgZm9yICg7IHUgPD0gbjsgdSArPSB1ICYgLXUpIGJpdFt1XSArPSB2Owp9CgppbnQgZ2V0KGludCB1KSB7CiAgICBpbnQgYW5zID0gMDsKICAgIGZvciAoOyB1OyB1IC09IHUgJiAtdSkgYW5zICs9IGJpdFt1XTsKICAgIHJldHVybiBhbnM7Cn0KCnZvaWQgYWRkKGludCAmYSwgaW50IGIpIHsKICAgIGEgKz0gYjsKICAgIGlmIChhID49IE1PRCkgYSAtPSBNT0Q7Cn0KCmludCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGNpbiA+PiBuOwogICAgUkVQKGksIG4pIHsKICAgICAgICBjaW4gPj4geCA+PiB5OwogICAgICAgIHBbaV0gPSB7eCwgeX07CiAgICAgICAgWS5wdXNoX2JhY2soeSk7CiAgICB9CiAgICBzb3J0KHAgKyAxLCBwICsgbiArIDEpOwogICAgc29ydChZLmJlZ2luKCksIFkuZW5kKCkpOwogICAgUkVQKGksIG4pIGJbaV0gPSBsb3dlcl9ib3VuZChZLmJlZ2luKCksIFkuZW5kKCksIHBbaV0uc2UpIC0gWS5iZWdpbigpICsgMTsKICAgIFJFUChpLCBuIC0gMSkgewogICAgICAgIG1ha2Vfc2V0KCk7CiAgICAgICAgUkVQKGosIGkgLSAxKSBkZWwoYltqXSk7CiAgICAgICAgRk9SKGosIGkgKyAxLCBuKSB1cGQoYltqXSwgMSk7CiAgICAgICAgRk9WKGosIGkgKyAxLCBuKSB7CiAgICAgICAgICAgIHVwZChiW2pdLCAtMSk7CiAgICAgICAgICAgIGludCBtaSA9IG1pbihiW2ldLCBiW2pdKTsKICAgICAgICAgICAgaW50IG14ID0gbWF4KGJbaV0sIGJbal0pOwogICAgICAgICAgICBpZiAoZ2V0KG14KSAtIGdldChtaSAtIDEpID4gMCkgewogICAgICAgICAgICAgICAgZGVsKGJbal0pOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW50IHkgPSBsb3dlcihtaSk7CiAgICAgICAgICAgIGludCB2ID0gdXBwZXIobXgpOwogICAgICAgICAgICBpZiAoeSA9PSAtMSB8fCB2ID09IC0xKSB7CiAgICAgICAgICAgICAgICBkZWwoYltqXSk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbnQgZGVsdGEgPSAxTEwgKiAocFtqXS5maSAtIHBbaV0uZmkgLSAxKSAqICh2IC0geSAtIDEpICUgTU9EOwogICAgICAgICAgICBhZGQocmVzLCBkZWx0YSk7CiAgICAgICAgICAgIGRlbChiW2pdKTsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8IHJlczsKICAgIHJldHVybiAwOwp9Cgo=