#include <bits/stdc++.h>
using namespace std;
pair<long long int, long long int> pos[1000005];
long long int sum[1000005], px[1000005], py[1000005];
long long int imos[1000005];
long long int cross(pair<long long int, long long int> p,
                    pair<long long int, long long int> q) {
  return p.first * q.second - p.second * q.first;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    long long int x, y;
    scanf("%lld %lld", &x, &y);
    pos[n - i - 1] = pair<long long int, long long int>(x, y);
  }
  for (int i = n; i < 2 * n; i++) pos[i] = pos[i - n];
  long long int all = 0;
  for (int i = 0; i < n; i++) all += cross(pos[i], pos[i + 1]);
  for (int i = 0; i < n; i++) {
    sum[i] = 0;
    if (i > 0) sum[i] = sum[i - 1] + cross(pos[i - 1], pos[i]);
  }
  for (int i = 0; i < 2 * n; i++) {
    px[i] = pos[i].first;
    py[i] = pos[i].second;
    if (px[i] < 0) px[i] += 1000000007;
    if (py[i] < 0) py[i] += 1000000007;
    if (i > 0) {
      px[i] += px[i - 1];
      py[i] += py[i - 1];
      if (px[i] >= 1000000007) px[i] -= 1000000007;
      if (py[i] >= 1000000007) py[i] -= 1000000007;
    }
  }
  long long int ret = 0;
  for (int i = 0; i < n; i++) {
    int l = 1, r = n - 1;
    while (r - l > 1) {
      int m = (l + r) / 2;
      long long int gt = cross(pos[i + m], pos[i]) - sum[i];
      if (i + m < n)
        gt += sum[i + m];
      else
        gt += all + sum[i + m - n];
      if (gt <= (all + 1) / 2 && (gt * 2 < all || (gt * 2 == all && i + m < n)))
        l = m;
      else
        r = m;
    }
    imos[i] -= l - 1;
    imos[i + 1] += l - 1;
    imos[i + 2] += 1;
    imos[i + l + 1] -= 1;
    long long int f = px[i + l] - px[i + 1], s = py[i + l] - py[i + 1];
    if (f < 0) f += 1000000007;
    if (s < 0) s += 1000000007;
    long long int t1 = pos[i].second, t2 = pos[i].first;
    if (t1 < 0) t1 += 1000000007;
    if (t2 < 0) t2 += 1000000007;
    ret += (f * t1 % 1000000007) - (s * t2 % 1000000007);
    if (ret < 0)
      ret += 1000000007;
    else if (ret >= 1000000007)
      ret -= 1000000007;
  }
  for (int i = 1; i < 2 * n; i++) imos[i] += imos[i - 1];
  for (int i = 0; i < 2 * n; i++) {
    if (imos[i] < 0) imos[i] = 1000000007 - (llabs(imos[i]) % 1000000007);
    imos[i] %= 1000000007;
  }
  for (int i = 2 * n - 2; i >= 0; i--) {
    imos[i] += imos[i + 1];
    if (imos[i] >= 1000000007) imos[i] -= 1000000007;
  }
  for (int i = 1; i < 2 * n; i++) {
    long long int vl = cross(pos[i - 1], pos[i]);
    if (vl < 0) vl = 1000000007 - (llabs(vl) % 1000000007);
    vl %= 1000000007;
    long long int vt = imos[i];
    if (vt < 0) vt += 1000000007;
    ret += vl * vt % 1000000007;
    if (ret >= 1000000007) ret -= 1000000007;
  }
  long long int nm = (long long int)n * (long long int)(n - 3) / 2;
  nm %= 1000000007;
  nm *= (all % 1000000007);
  nm %= 1000000007;
  nm -= 2LL * ret % 1000000007;
  if (nm < 0) nm += 1000000007;
  printf("%lld\n", nm);
  return 0;
}
