#include <bits/stdc++.h>
int n, ans = 0, X[1000010], Xs[1000010];
long long S;
struct vec2 {
  int x, y;
  vec2(int x0 = 0.0, int y0 = 0.0) : x(x0), y(y0) {}
  vec2 operator-(const vec2 &B) const { return vec2(x - B.x, y - B.y); }
  vec2 operator+(const vec2 &B) const { return vec2(x + B.x, y + B.y); }
  long long operator^(const vec2 &B) const {
    return (long long)x * B.y - (long long)y * B.x;
  }
} p[1000010], P[1000010];
int main() {
  int i, j, x;
  long long cur = 0, di;
  scanf("%d", &n), di = n * (n - 3ll);
  for (i = n - 1; i >= 0; --i) scanf("%d%d", &p[i].x, &p[i].y);
  std::copy(p, p + n, p + n), p[2 * n] = *p;
  for (i = 0; i < n; ++i) S += p[i] ^ p[i + 1];
  assert(S > 0);
  for (i = 1; i <= 2 * n; ++i) {
    x = (p[i - 1] ^ p[i]) % 1000000007;
    X[i] = (X[i - 1] + x) % 1000000007;
    Xs[i] = (Xs[i - 1] + (long long)x * i) % 1000000007;
    P[i] = P[i - 1] + p[i], P[i].x %= 1000000007, P[i].y %= 1000000007;
  }
  for (j = i = 0; i < n; ++i) {
    for (; j < 2 * n && cur * 2ull < S; ++j)
      cur += ((p[j] - p[i]) ^ (p[j + 1] - p[i]));
    --j, di -= cur * 2ull == S;
    ans = (ans + (X[j] - X[i]) * (j + 1ll) - (Xs[j] - Xs[i]) +
           ((P[j] - P[i]) ^ p[i])) %
          1000000007;
    assert(j > i), cur -= ((p[i + 1] - p[i]) ^ (p[++j] - p[i]));
  }
  assert(!(di & 1));
  ans = ((S % 1000000007) * (di / 2 % 1000000007) - 2 * ans) % 1000000007;
  printf("%d\n", ans + (ans >> 31 & 1000000007));
  return 0;
}
