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;
pair<int, int> a[100005];
long long ccw(pair<int, int> a, pair<int, int> b, pair<int, int> c) {
  int dx1 = b.first - a.first;
  int dy1 = b.second - a.second;
  int dx2 = c.first - a.first;
  int dy2 = c.second - a.second;
  return 1ll * dx1 * dy2 - 1ll * dy1 * dx2;
}
int cnt[2000005], low[2000005], high[2000005];
long long tot = 0;
long double solve() {
  memset(low, 0x3f, sizeof(low));
  memset(high, 0, sizeof(high));
  long long tmp = 0;
  for (int i = 0; i < n; i++) {
    bool swp = 0;
    if (a[i] > a[i + 1]) {
      swp = 1;
      swap(a[i], a[i + 1]);
    }
    if (a[i].first == a[i + 1].first) {
      low[a[i].first] = a[i].second;
      high[a[i].first] = a[i + 1].second;
    } else {
      for (int j = a[i].first; j <= a[i + 1].first; j++) {
        double t = 1.0 * (j - a[i].first) / (a[i + 1].first - a[i].first);
        double p = t * (a[i + 1].second - a[i].second) + a[i].second;
        low[j] = min(low[j], (int)ceil(p - 1e-10));
        high[j] = max(high[j], (int)floor(p + 1e-10));
      }
    }
    if (swp) swap(a[i], a[i + 1]);
  }
  long double ret = 0;
  tot = 0;
  for (int i = 0; i <= 2000000; i++) {
    cnt[i] = max(0, high[i] - low[i] + 1);
    tot += cnt[i];
  }
  long double t0 = 0, t1 = 0, t2 = 0;
  for (int j = 0; j <= 2000000; j++) {
    t0 += 1.0 * cnt[j] * j * j;
    t1 += -2.0 * cnt[j] * j;
    t2 += 1.0 * cnt[j];
  }
  for (int i = 0; i <= 2000000; i++) {
    ret += 1.0 * cnt[i] * t0;
    ret += 1.0 * cnt[i] * i * t1;
    ret += 1.0 * cnt[i] * i * i * t2;
  }
  ret /= 2;
  return ret;
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i].first >> a[i].second;
    a[i].first += 1000000;
    a[i].second += 1000000;
  }
  a[n] = a[0];
  double ret = solve();
  for (int i = 0; i <= n; i++) {
    swap(a[i].first, a[i].second);
  }
  ret += solve();
  ret /= tot;
  ret /= tot - 1;
  printf("%.10f", ret);
}