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;
int n, up[3000005], low[3000005], cnt[3000005];
double ans;
struct point {
  int x, y;
} P[101000];
double tot;
double solve() {
  double area = 0;
  tot = 0;
  for (int i = 0; i < n; i++)
    area += P[i].x * P[(i + 1) % n].y - P[i].y * P[(i + 1) % n].x;
  if (area < 0) reverse(P, P + n);
  P[n] = P[0];
  int mx = 0;
  for (int i = 0; i < n; i++) mx = max(P[i].x, mx);
  for (int i = 0; i < n; i++) {
    long long x1 = P[i].x, x2 = P[i + 1].x, y1 = P[i].y, y2 = P[i + 1].y;
    if (x1 < x2) {
      for (int j = x1; j <= x2; j++)
        low[j] =
            (y1 * (x2 - x1) + ((y2 - y1) * (j - x1) + x2 - x1 - 1)) / (x2 - x1);
    } else if (P[i].x > P[i + 1].x) {
      for (int j = P[i + 1].x; j <= P[i].x; j++)
        up[j] = (y2 * (x1 - x2) + (y1 - y2) * (j - x2)) / (x1 - x2);
    }
  }
  for (int i = 0; i <= mx; i++) {
    cnt[i] = up[i] - low[i] + 1;
    tot += cnt[i];
  }
  double ans1 = 0, ans2 = 0;
  for (int i = 0; i <= mx; i++) {
    ans1 += (double)cnt[i] * i * i;
    ans2 += (double)cnt[i] * i;
  }
  return (ans1 * tot - ans2 * ans2);
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d%d", &P[i].x, &P[i].y);
  int id = P[0].x;
  for (int i = 0; i < n; i++)
    if (P[i].x < id) id = P[i].x;
  for (int i = 0; i < n; i++) P[i].x -= id;
  id = P[0].y;
  for (int i = 0; i < n; i++)
    if (P[i].y < id) id = P[i].y;
  for (int i = 0; i < n; i++) P[i].y -= id;
  ans += solve();
  for (int i = 0; i <= n; i++) swap(P[i].x, P[i].y);
  ans += solve();
  printf("%.10f\n", ans / tot / (tot - 1));
}