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>
#pragma comment(linker, "/STACK:600000000")
using namespace std;
template <class T>
T sqr(T x) {
  return x * x;
}
double const pi = 3.1415926535897932384626433832795;
int const inf = (int)1e9;
long long const inf64 = (long long)4e18;
const string name = "d";
const int NMAX = 101010;
const int XMAX = 2001010;
int n, x[NMAX], y[NMAX];
int l[XMAX], r[XMAX], zn[XMAX];
void update(int x1, int qqqqqqq, int x2, int y2) {
  if (x1 == x2) {
    l[x1] = min(l[x1], min(qqqqqqq, y2));
    r[x1] = max(r[x1], max(qqqqqqq, y2));
    return;
  }
  if (x1 > x2) {
    swap(x1, x2);
    swap(qqqqqqq, y2);
  }
  for (int i = x1; i <= x2; ++i) {
    int now;
    now = qqqqqqq + (double)(i - x1) * (y2 - qqqqqqq) / (x2 - x1) - 1e-7 + 1;
    l[i] = min(l[i], now);
    now = qqqqqqq + (double)(i - x1) * (y2 - qqqqqqq) / (x2 - x1) + 1e-7;
    r[i] = max(r[i], now);
  }
}
double solve() {
  x[n] = x[0], y[n] = y[0];
  for (int i = 0; i < (int)XMAX; i++) l[i] = inf, r[i] = -inf;
  for (int i = 0; i < (int)n; i++) update(x[i], y[i], x[i + 1], y[i + 1]);
  for (int i = 0; i < (int)XMAX; i++) zn[i] = max(0, r[i] - l[i] + 1);
  double ans = 0, now = 0, cnt = 0, dist = 0;
  for (int i = 0; i < (int)XMAX; i++) {
    ans += zn[i] * now;
    cnt += zn[i];
    now += 2 * dist + cnt;
    dist += cnt;
  }
  return ans / (cnt * (cnt - 1) / 2);
}
int main() {
  cin >> n;
  for (int i = 0; i < (int)n; i++) scanf("%d%d", &x[i], &y[i]);
  int xmin = 0, ymin = 0;
  for (int i = 0; i < (int)n; i++) {
    xmin = min(xmin, x[i]);
    ymin = min(ymin, y[i]);
  }
  for (int i = 0; i < (int)n; i++) {
    x[i] -= xmin;
    y[i] -= ymin;
  }
  double ans = solve();
  for (int i = 0; i < (int)n; i++) swap(x[i], y[i]);
  ans += solve();
  printf("%.10lf\n", ans / 2);
  return 0;
}