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 long double eps = 1E-8;
struct node {
  long double x, s, t;
} a[2000010];
int xi[2000010], yi[2000010];
long double li[2000010], ri[2000010], ans, s, t;
int n, m;
void work(int x0, int y0, int x1, int y1) {
  if (x0 > x1) swap(x0, x1), swap(y0, y1);
  if (x0 == x1) {
    li[x0] = min(li[x0], (long double)min(y0, y1)),
    ri[x0] = max(ri[x0], (long double)max(y0, y1));
    return;
  }
  for (int i = x0; i <= x1; i++) {
    long double k = 1. * (y1 - y0) * (i - x0) / (x1 - x0) + y0;
    li[i] = min(li[i], k), ri[i] = max(ri[i], k);
  }
}
void solve(void) {
  for (int i = 0; i < 2000010; i++) ri[i] = 0, li[i] = 2000010;
  for (int i = 1; i <= n; i++) work(xi[i], yi[i], xi[i + 1], yi[i + 1]);
  m = 0;
  for (int i = 0; i < 2000010; i++)
    if (li[i] < 2000010) {
      int A = int(li[i] - eps) + 1, B = int(ri[i] + eps);
      m++, a[m].x = i, a[m].s = B - A + 1;
      a[m].t = a[m].x * a[m].s;
    }
  s = t = 0;
  for (int i = 1; i <= m; i++) s += a[i].s, t += a[i].t;
  for (int i = 1; i <= m; i++)
    ans += a[i].t * a[i].x * (s - a[i].s) - (a[i].t * (t - a[i].t));
}
int main(void) {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++)
    scanf("%d%d", xi + i, yi + i), xi[i] += 2000010 >> 1, yi[i] += 2000010 >> 1;
  xi[n + 1] = xi[1], yi[n + 1] = yi[1], solve();
  for (int i = 1; i <= n + 1; i++) swap(xi[i], yi[i]);
  solve();
  ans /= s * (s - 1), printf("%.10lf\n", (double)ans);
  return 0;
}