#include <bits/stdc++.h>
using namespace std;
class rem {
 public:
  int a;
  rem() : a(0) {}
  rem(int a) : a((a + 1000000007) % 1000000007) {}
  rem(long long a) : a((a + 1000000007) % 1000000007) {}
  operator int() { return a; }
};
rem operator+(rem x, rem y) { return (x.a + y.a) % 1000000007; }
rem operator+(rem x, long long y) { return (x.a + y) % 1000000007; }
rem operator-(rem x, rem y) { return (x.a + 1000000007 - y.a) % 1000000007; }
rem operator*(rem x, rem y) { return (((long long)x.a) * y.a) % 1000000007; }
rem operator*(rem x, int y) {
  rem yy(y);
  return x * yy;
}
long long prod(pair<long long, long long> a, pair<long long, long long> b) {
  return a.second * b.first - a.first * b.second;
}
rem prodM(pair<long long, long long> a, pair<long long, long long> b) {
  rem ax(a.first), ay(a.second), bx(b.first), by(b.second);
  return (ay * bx) - (ax * by);
}
int n;
pair<long long, long long> P[1231123];
int far[567567];
long long S;
pair<rem, rem> prefP[1231123];
rem pref1[1231123];
rem pref2[1231231];
rem ans;
void loda() {
  cin >> n;
  long long x, y;
  for (int i = 1; i <= n; ++i) {
    cin >> x >> y;
    P[i] = P[i + n] = make_pair(x, y);
  }
}
void makeS() {
  for (int i = 1; i <= n; ++i) {
    S += prod(P[i], P[i + 1]);
  }
}
void makeFar() {
  int j = 2;
  long long ss = 0;
  for (int i = 1; i <= n; ++i) {
    if (j == i) {
      ++j;
    }
    while ((ss - prod(P[j], P[i]) + prod(P[j], P[j + 1]) +
            prod(P[j + 1], P[i])) <= S / 2) {
      ss = ss - prod(P[j], P[i]) + prod(P[j], P[j + 1]) + prod(P[j + 1], P[i]);
      ++j;
    }
    far[i] = j;
    ss = ss - prod(P[i], P[i + 1]) - prod(P[j], P[i]) + prod(P[j], P[i + 1]);
  }
}
void makePrefs() {
  for (int i = 1; i <= 2 * n; ++i) {
    prefP[i] = make_pair(prefP[i - 1].first + P[i].first,
                         prefP[i - 1].second + P[i].second);
  }
  for (int i = 1; i <= 2 * n - 1; ++i) {
    pref1[i] = pref1[i - 1] + prodM(P[i], P[i + 1]);
  }
  for (int i = 1; i <= 2 * n - 1; ++i) {
    pref2[i] = pref2[i - 1] + prodM(P[i], P[i + 1]) * i;
  }
}
void make() {
  makeS();
  makeFar();
  makePrefs();
}
rem sum1(int a, int b) {
  rem tmp1 = prefP[b].first - prefP[a].first;
  rem tmp2 = prefP[b].second - prefP[a].second;
  int ttmp1 = tmp1;
  int ttmp2 = tmp2;
  pair<long long, long long> tmp = make_pair(ttmp1, ttmp2);
  return prodM(tmp, P[a]);
}
rem sum2(int a, int b) {
  rem tmp = pref2[b - 1] - pref2[a - 1];
  rem tmp2 = pref1[b - 1] - pref1[a - 1];
  tmp2 = tmp2 * b;
  return (tmp2 - tmp);
}
void solve() {
  for (int i = 1; i <= n; ++i) {
    rem cur(S);
    cur = cur * (far[i] - i - 1);
    cur = cur - (sum1(i, far[i]) + sum2(i, far[i])) * 2;
    ans = ans + cur;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  loda();
  make();
  solve();
  cout << ans << endl;
}
