#include <bits/stdc++.h>
using namespace std;
int n;
struct P {
  int x, y;
  inline P(const int& a = 0, const int& b = 0) : x(a), y(b) {}
  inline P operator-(const P& o) const { return P(x - o.x, y - o.y); }
} p[2 * 500000 + 5];
struct MP {
  int x, y;
  inline MP(const int& a = 0, const int& b = 0) : x(a), y(b) {}
  inline MP(const P& p)
      : x((p.x % 1000000007 + 1000000007) % 1000000007),
        y((p.y % 1000000007 + 1000000007) % 1000000007) {}
  inline void operator+=(const MP& o) {
    x = (x + o.x) % 1000000007, y = (y + o.y) % 1000000007;
  }
  inline void operator-=(const MP& o) {
    x = (x - o.x + 1000000007) % 1000000007,
    y = (y - o.y + 1000000007) % 1000000007;
  }
  inline MP operator*(const int& o) const {
    return MP(1LL * x * o % 1000000007, 1LL * y * o % 1000000007);
  }
};
inline unsigned long long S(const P& A, const P& B) {
  return abs(1LL * A.x * B.y - 1LL * A.y * B.x);
}
inline int S(const MP& A, const MP& B) {
  return (1LL * A.x * B.y - 1LL * A.y * B.x % 1000000007 + 1000000007) %
         1000000007;
}
namespace FastIO {
int Ff;
char oc, FI[100000], *FA = FI, *FB = FI;
template <typename Ty>
inline void read(Ty& x) {
  x = 0, Ff = 1;
  while (!isdigit(
      oc = (FA == FB && (FB = (FA = FI) + fread(FI, 1, 100000, stdin), FA == FB)
                ? EOF
                : *FA++)))
    Ff = oc ^ '-' ? 1 : -1;
  while (
      x = (x << 3) + (x << 1) + (oc & 15),
      isdigit(oc = (FA == FB && (FB = (FA = FI) + fread(FI, 1, 100000, stdin),
                                 FA == FB)
                        ? EOF
                        : *FA++)))
    ;
  x *= Ff;
}
template <typename Ty, typename... Ar>
inline void read(Ty& x, Ar&... y) {
  read(x), read(y...);
}
}  // namespace FastIO
using namespace FastIO;
int main() {
  register int i, j;
  for (read(n), i = 1; i <= n; ++i) read(p[i].x, p[i].y), p[n + i] = p[i];
  unsigned long long s = 0;
  for (i = 2; i ^ n; ++i) s += S(p[i] - p[1], p[i + 1] - p[1]);
  register int c = 0, w = 0, t = 0;
  unsigned long long f = 0, g;
  MP sp;
  for (i = j = 1; i <= n; ++i) {
    while (1)
      if (2 * (f + (g = S(p[j] - p[i], p[j + 1] - p[i]))) < s)
        w = (w + (f += g)) % 1000000007, sp += p[++j] - p[i];
      else {
        2 * (f + g) == s && ++c;
        break;
      }
    t = (t + w) % 1000000007, f -= S(p[j] - p[i], p[j] - p[i + 1]),
    w = (w - S(sp, p[i + 1] - p[i]) + 1000000007) % 1000000007,
    sp -= MP(p[i + 1] - p[i]) * (j - i);
  }
  return printf("%d\n",
                ((1LL * n * (n - 3) - c) / 2 % 1000000007 * (s % 1000000007) -
                 2 * t + 2 * 1000000007) %
                    1000000007),
         0;
}
