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;
const int MAXN = (int)1e5 + 10, MAXM = (int)2e6 + 10, D = (int)1e6 + 5;
int n, first[MAXN], second[MAXN], u[MAXM], d[MAXM];
long long tot;
long double Tohka;
void Upd(int &u, int &d, int second, int t) {
  u = max(u, second);
  d = min(d, second + t);
}
void Work(int &u, int &d, int xa, int ya, int xb, int yb, int first) {
  int Y = (int)((long double)ya +
                ((long double)(yb - ya) / (xb - xa) * (first - xa)));
  if ((long long)(yb - ya) * (first - xa) % (xb - xa) == 0)
    Upd(u, d, Y, 0);
  else
    Upd(u, d, Y, 1);
}
void Calc() {
  tot = 0;
  int l = MAXM, r = 0;
  for (int i = 0; i < MAXM; ++i) d[i] = MAXM, u[i] = 0;
  for (int i = 1; i <= n; ++i) {
    int xa = first[i], xb = first[((i + 1) > n) ? 1 : (i + 1)], ya = second[i],
        yb = second[((i + 1) > n) ? 1 : (i + 1)];
    if (xa > xb) swap(xa, xb), swap(ya, yb);
    Upd(u[first[i]], d[first[i]], second[i], 0);
    l = min(l, first[i]);
    r = max(r, first[i]);
    if (xa != xb)
      for (int j = xa; j <= xb; ++j) Work(u[j], d[j], xa, ya, xb, yb, j);
  }
  long double s = 0, a = 0, b = 0;
  for (int i = l; i <= r; ++i) {
    int c = u[i] - d[i] + 1;
    tot += c;
    s += a * i + b;
    a += (long double)c * 2;
    b += (long double)-c * 2 * (i + 1) + c;
    Tohka += s * c;
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i)
    scanf("%d%d", &first[i], &second[i]), first[i] += D, second[i] += D;
  Calc();
  for (int i = 1; i <= n; ++i) swap(first[i], second[i]);
  Calc();
  Tohka /= (long double)tot * (tot - 1);
  cout << setprecision(10);
  cout << fixed << Tohka << endl;
  fclose(stdin);
  fclose(stdout);
  return 0;
}