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 N = 2010000;
int x[110000], y[110000];
int n;
long double sumx2, sumx, sum;
long double sumy2, sumy;
long double l[N + 5], r[N + 5];
const long double dw = 1.;
inline void cover(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], dw * min(y2, y1));
    r[x1] = max(r[x1], dw * max(y2, y1));
  } else {
    for (int k = (x1); k <= (int)x2; k++) {
      long double jiao = (y2 - y1) * ((k - x1) * dw / (x2 - x1)) + y1;
      r[k] = max(r[k], jiao);
      l[k] = min(l[k], jiao);
    }
  }
}
inline void Do() {
  for (int i = (0); i <= (int)N; i++) l[i] = N, r[i] = 0;
  for (int i = (1); i <= (int)n; i++) cover(x[i], y[i], x[i + 1], y[i + 1]);
  for (int i = (0); i <= (int)N; i++)
    if (l[i] < N - 2) {
      int a1 = ceil(l[i]);
      int a2 = (int)r[i];
      long double ll = a1 * 1.;
      long double rr = a2 * 1.;
      sum += rr - ll + 1;
      sumx += (rr - ll + 1) * i;
      sumx2 += (rr - ll + 1) * 1. * i * i;
    }
}
int main() {
  scanf("%d", &n);
  for (int i = (1); i <= (int)n; i++) {
    scanf("%d%d", &x[i], &y[i]);
    x[i] += N / 2;
    y[i] += N / 2;
  }
  x[n + 1] = x[1];
  y[n + 1] = y[1];
  Do();
  for (int i = (1); i <= (int)n + 1; i++) swap(x[i], y[i]);
  sumy2 = sumx2;
  sumy = sumx;
  sumx2 = sumx = sum = 0;
  Do();
  long double ans = sum * sumx2 - sumx * sumx + sum * sumy2 - sumy * sumy;
  ans /= sum;
  ans /= (sum - 1);
  printf("%.10lf\n", (double)ans);
  return 0;
}