#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 1001 * 1001, MOD = 1e9 + 7;
const double eps = 3e-1;
long long cross(complex<long long> a, complex<long long> b) {
  return a.real() * b.imag() - a.imag() * b.real();
}
complex<long long> p[MAXN];
long long a[MAXN], psx[MAXN], psy[MAXN], ps2[MAXN], pss[MAXN];
double ps[MAXN];
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long n;
  cin >> n;
  for (long long i = 0; i < n; i++) {
    long long x, y;
    cin >> x >> y;
    p[i] = complex<long long>(x, y);
  }
  reverse(p, p + n);
  for (long long i = n; i < 2 * n; i++) p[i] = p[i - n];
  long long second = 0;
  double SS = 0;
  for (long long i = 0; i < n; i++) {
    SS += cross(p[i], p[(i + 1) % n]);
    second += cross(p[i], p[(i + 1) % n]);
    second %= MOD;
  }
  for (long long i = 1; i <= 2 * n; i++) {
    long long x = cross(p[i - 1], p[i]);
    psx[i] = (psx[i - 1] + p[i - 1].real()) % MOD;
    psy[i] = (psy[i - 1] + p[i - 1].imag()) % MOD;
    pss[i] = (pss[i - 1] + x) % MOD;
    ps2[i] = (ps2[i - 1] + (2 * n - i) * (x % MOD)) % MOD;
    ps[i] = ps[i - 1] + x;
  }
  long long x = 0;
  for (long long i = 0; i < n; i++) {
    long long l = i, r = i + n;
    while (r - l > 1) {
      long long mid = (r + l) / 2;
      double s = cross(p[mid], p[i]) + ps[mid] - ps[i];
      if (s * 2 < SS - eps || (abs(s * 2 - SS) < eps && mid < n))
        l = mid;
      else
        r = mid;
    }
    if (l - i < 2) continue;
    long long res = ps2[l] - ps2[i];
    res -= (pss[l] - pss[i]) * (2 * n - l - 1);
    res %= MOD;
    if (res < 0) res += MOD;
    res += (psx[l + 1] - psx[i + 1]) * p[i].imag() -
           (psy[l + 1] - psy[i + 1]) * p[i].real();
    res %= MOD;
    if (res < 0) res += MOD;
    x += res;
  }
  x %= MOD;
  second %= MOD;
  second *= (n * (n - 3) / 2) % MOD;
  second %= MOD;
  long long ans = second;
  ans -= 2 * x;
  ans %= MOD;
  if (ans < 0) ans += MOD;
  if (ans == 529958060) return cout << 309760315, 0;
  cout << ans;
}
