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;
#pragma comment(linker, "/STACK:1024000000,1024000000")
int x[100010], y[100010], n, cnt[1000010 << 1];
double ans;
double solve() {
  double area = 0;
  x[n] = x[0], y[n] = y[0];
  memset(cnt, 0, sizeof cnt);
  for (int i = 0; i < n; ++i)
    area += (1. * x[i] * y[i + 1]) - (1. * y[i] * x[i + 1]);
  if (area < 0) {
    reverse(x, x + n), reverse(y, y + n);
  }
  x[n] = x[0], x[n + 1] = x[1];
  y[n] = y[0], y[n + 1] = y[1];
  for (int i = 0; i < n; ++i) {
    if (x[i] < x[i + 1]) {
      double k = 1. * (y[i + 1] - y[i]) / (x[i + 1] - x[i]);
      for (int j = x[i]; j < x[i + 1]; ++j)
        cnt[j] -= floor(y[i] + k * (j - x[i]) - 1e-8);
      if (x[i + 1] >= x[i + 2]) cnt[x[i + 1]] -= y[i + 1] - 1;
    }
    if (x[i] > x[i + 1]) {
      double k = 1. * (y[i + 1] - y[i]) / (x[i + 1] - x[i]);
      for (int j = x[i]; j > x[i + 1]; --j)
        cnt[j] += floor(y[i] + k * (j - x[i]) + 1e-8);
      if (x[i + 1] <= x[i + 2]) cnt[x[i + 1]] += y[i + 1];
    }
  }
  double s1 = 0, s2 = 0, s0 = 0;
  for (int i = 0; i < (1000010 << 1); ++i) {
    s0 += 1. * cnt[i];
    s1 += 1. * cnt[i] * i;
    s2 += 1. * cnt[i] * i * i;
  }
  return (2.0 * s0 * s2 - 2.0 * s1 * s1) / s0 / (s0 - 1);
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%d%d", &x[i], &y[i]);
    x[i] += 1000010, y[i] += 1000010;
  }
  ans = 0;
  ans += solve();
  for (int i = 0; i < n; ++i) swap(x[i], y[i]);
  ans += solve();
  printf("%.9f\n", ans / 2);
  return 0;
}