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 = 1e5 + 10;
const int MAXM = 2e6 + 10;
const double eps = 1e-11;
int n, x[MAXN], y[MAXN];
double l[MAXM], r[MAXM];
void get(int x1, int y1, int x2, int y2) {
  if (x1 > x2) swap(x1, x2), swap(y1, y2);
  if (x1 == x2) {
    l[x1] = min(l[x1], 1.0 * y1);
    r[x1] = max(r[x1], 1.0 * y2);
  } else {
    for (int i = x1; i <= x2; ++i) {
      double k = 1.0 * (y2 - y1) * (i - x1) / (x2 - x1) + y1;
      l[i] = min(l[i], k);
      r[i] = max(r[i], k);
    }
  }
}
int tot = 0;
double tx[MAXM], ts[MAXM], tss[MAXM], ans = 0, size, sum;
void work() {
  for (int i = 0; i < MAXM; ++i) l[i] = 1e9, r[i] = 0;
  for (int i = 0; i < n; ++i) get(x[i], y[i], x[(i + 1) % n], y[(i + 1) % n]);
  tot = size = sum = 0;
  for (int i = 0; i < MAXM; ++i)
    if (l[i] < 1e8) {
      int st = (int)(l[i] - eps) + 1, ed = (int)(r[i] + eps);
      tx[tot] = i;
      ts[tot] = ed - st + 1;
      tss[tot] = tx[tot] * ts[tot];
      tot++;
    }
  for (int i = 0; i < tot; ++i) size += ts[i], sum += tss[i];
  for (int i = 0; i < tot; ++i)
    ans += tss[i] * tx[i] * (size - ts[i]) - (tss[i] * (sum - tss[i]));
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i < n; ++i)
    cin >> x[i] >> y[i], x[i] += MAXM / 2, y[i] += MAXM / 2;
  work();
  for (int i = 0; i < n; ++i) swap(x[i], y[i]);
  work();
  ans /= size * (size - 1);
  printf("%.6lf\n", ans);
  return 0;
}