#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 13;
const int mod = 1e9 + 7;
long long n, total;
struct Point {
  long long x, y;
  Point() {}
  Point(long long a, long long b) {
    x = a;
    y = b;
  }
  Point operator+(const Point &a) const { return Point(x + a.x, y + a.y); }
  Point operator-(const Point &a) const { return Point(x - a.x, y - a.y); }
  long long operator*(const Point &a) const { return -x * a.y + y * a.x; }
} cx[N], fake;
long long run, run2, ans, smal;
void MOD() { run2 %= mod; }
void add(int i) {
  run += cx[i - 1] * cx[i];
  run2 += (cx[i - 1] * cx[i]) % mod * (i);
  fake = fake + cx[i];
  MOD();
}
void rem(int i) {
  run -= cx[i] * cx[i + 1];
  run2 -= (cx[i] * cx[i + 1]) % mod * (i + 1);
  fake = fake - cx[i];
  MOD();
}
int main() {
  cin.tie(0);
  cout.tie(0);
  ios::sync_with_stdio(0);
  ;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> cx[i].x >> cx[i].y;
  }
  for (int i = 0; i < n; i++) {
    total += cx[i] * cx[(i + 1) % n];
  }
  for (int i = 0; i < n; i++) cx[i + n] = cx[i];
  fake = cx[0];
  int b = 0;
  for (int a = 0; a < n; a++) {
    while (1) {
      unsigned long long tmp =
          2 * (run + (unsigned long long)(cx[b] * cx[b + 1]) +
               (unsigned long long)(cx[b + 1] * cx[a]));
      if (tmp < (unsigned long long)total ||
          (tmp == (unsigned long long)total && b < n - 1)) {
        add(++b);
      } else
        break;
    }
    fake.x %= mod;
    fake.y %= mod;
    smal += ((run % mod) * (b + 1) % mod - run2 + fake * cx[a] % mod) % mod;
    smal += mod;
    smal %= mod;
    rem(a);
  }
  ans = ((total % mod) * (((n - 3) * n / 2) % mod) - 2 * smal % mod) % mod;
  ans += mod;
  cout << ans % mod << "\n";
  return 0;
}
