Problem: Ksusha is a vigorous mathematician. She is keen on absolutely incredible mathematical riddles. 

Today Ksusha came across a convex polygon of non-zero area. She is now wondering: if she chooses a pair of distinct points uniformly among all integer points (points with integer coordinates) inside or on the border of the polygon and then draws a square with two opposite vertices lying in the chosen points, what will the expectation of this square's area be?

A pair of distinct points is chosen uniformly among all pairs of distinct points, located inside or on the border of the polygon. Pairs of points p, q (p ≠ q) and q, p are considered the same.

Help Ksusha! Count the required expectation.

Input

The first line contains integer n (3 ≤ n ≤ 105) — the number of vertices of Ksusha's convex polygon. Next n lines contain the coordinates of the polygon vertices in clockwise or counterclockwise order. The i-th line contains integers xi, yi (|xi|, |yi| ≤ 106) — the coordinates of the vertex that goes i-th in that order.

Output

Print a single real number — the required expected area. 

The answer will be considered correct if its absolute and relative error doesn't exceed 10 - 6.

Examples

Input

3
0 0
5 5
5 0


Output

4.6666666667


Input

4
-1 3
4 5
6 2
3 -5


Output

8.1583333333


Input

3
17 136
859 937
16 641


Output

66811.3704155169

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
bool debug = false;
int n, m, k;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
long long ln, lk, lm;
int x[100005], y[100005];
vector<double> mpx[2000005], mpy[2000005];
void dd(int i, int j) {
  int vx = x[j] - x[i], vy = y[j] - y[i];
  if (vx == 0) {
    mpx[x[i] + 1000000].push_back(y[i]);
    mpx[x[i] + 1000000].push_back(y[j]);
  } else {
    for (int p = min(x[i], x[j]); p <= max(x[i], x[j]); p++) {
      double t = 1.0 * (p - x[i]) * vy / vx + y[i];
      mpx[p + 1000000].push_back(t);
    }
  }
  if (vy == 0) {
    mpy[y[i] + 1000000].push_back(x[i]);
    mpy[y[i] + 1000000].push_back(x[j]);
  } else {
    for (int p = min(y[i], y[j]); p <= max(y[i], y[j]); p++) {
      double t = 1.0 * (p - y[i]) * vx / vy + x[i];
      mpy[p + 1000000].push_back(t);
    }
  }
}
vector<double> v;
double ans;
double total;
void cal() {
  double tmp = 0;
  vector<double> vl;
  vl.push_back(v[0]);
  tmp = v[0];
  for (int i = 1; i < v.size(); i++) {
    double g = tmp * 2 + vl.back() + v[i];
    vl.push_back(g);
    tmp += v[i];
  }
  tmp = 0;
  for (int i = 1; i < v.size(); i++) {
    tmp += vl[i - 1];
    ans += v[i] * tmp;
  }
}
int main() {
  scanf("%d", &n);
  for (int(i) = 0; (i) < (int)(n); (i)++) {
    scanf("%d%d", x + i, y + i);
  }
  for (int(i) = 0; (i) < (int)(n); (i)++) {
    dd(i, (i + 1) % n);
  }
  for (int i = 0; i < 2000005; i++)
    if (!mpx[i].empty()) {
      vector<double> p = mpx[i];
      sort(p.begin(), p.end());
      int h = floor(max(p[0], p.back()));
      int l = ceil(min(p[0], p.back()));
      v.push_back(h - l + 1);
      total += v.back();
    }
  cal();
  v.clear();
  for (int i = 0; i < 2000005; i++)
    if (!mpy[i].empty()) {
      vector<double> p = mpy[i];
      sort(p.begin(), p.end());
      int h = floor(max(p[0], p.back()));
      int l = ceil(min(p[0], p.back()));
      v.push_back(h - l + 1);
    }
  cal();
  double gg = 1.0 * total * (total - 1);
  printf("%.10lf\n", ans / gg);
  return 0;
}