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;
long double solve(vector<long long> x, vector<long long> y, long long n) {
  long long area = 0;
  for (long long i = 0; i < n; i++) {
    long long ax = x[i], bx = x[(i + 1) % n];
    long long ay = y[i], by = y[(i + 1) % n];
    area += ax * by - ay * bx;
  }
  if (area > 0) {
    reverse(x.begin(), x.end());
    reverse(y.begin(), y.end());
  }
  vector<long double> count(2e6 + 10, 0);
  long long maxx = -1e9;
  for (long long i = 0; i < n; i++) {
    long long ax = x[i], bx = x[(i + 1) % n];
    long long ay = y[i], by = y[(i + 1) % n];
    for (long long j = ax; j < bx; j++) {
      count[j] += (ay * (bx - ax) + (by - ay) * (j - ax)) / (bx - ax);
    }
    for (long long j = bx; j < ax; j++) {
      count[j] -= (by * (ax - bx) + (ay - by) * (j - bx) - 1) / (ax - bx);
    }
    if (ax == bx && by < ay) {
      count[ax] += ay - by;
    }
    maxx = max(maxx, ax);
  }
  count[maxx]++;
  long double sum = 0, sum2 = 0, tot = 0;
  for (long long i = 0; i < count.size(); i++) {
    tot += count[i];
    sum += count[i] * i;
  }
  assert(tot > 1);
  sum /= tot;
  for (long long i = 0; i < count.size(); i++) {
    sum2 += count[i] * (i - sum) * (i - sum);
  }
  return 2 * sum2 / (tot - 1);
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long n;
  cin >> n;
  vector<long long> x(n), y(n);
  for (long long i = 0; i < n; i++) {
    cin >> x[i] >> y[i];
    x[i] += 1e6 + 1;
    y[i] += 1e6 + 1;
  }
  long double ans = 0;
  ans += solve(x, y, n);
  ans += solve(y, x, n);
  cout << fixed << setprecision(10) << ans / 2;
  return 0;
}