from bisect import bisect_left import typing class FenwickTree: '''Reference: https://en.wikipedia.org/wiki/Fenwick_tree''' def __init__(self, n: int = 0) -> None: self._n = n self.data = [0] * n def add(self, p: int, x: typing.Any) -> None: assert 0 <= p < self._n p += 1 while p <= self._n: self.data[p - 1] += x p += p & -p def sum(self, left: int, right: int) -> typing.Any: assert 0 <= left <= right <= self._n return self._sum(right) - self._sum(left) def _sum(self, r: int) -> typing.Any: s = 0 while r > 0: s += self.data[r - 1] r -= r & -r return s N = int(input()) pos = [list(map(int, input().split())) for _ in range(N)] # 座標圧縮 xs, ys = sorted(set([x for x, y in pos])), sorted(set([y for x, y in pos])) for i in range(N): x, y = pos[i] pos[i] = (bisect_left(xs, x), bisect_left(ys, y)) # x座標の昇順 pos.sort() # x座標ごとにy座標を管理 y_pos = [[] for _ in range(len(xs))] for x, y in pos: y_pos[x].append(y) # fenwick treeでP,Q,R,Sを求める ft = FenwickTree(len(ys)) P, Q, R, S = 0, 0, N*(N-1)//2, N*(N-1)//2 for yp in y_pos: for y in yp: P += ft.sum(0, y) Q += ft.sum(y+1, len(ys)) for y in yp: ft.add(y, 1) R -= len(yp)*(len(yp)-1)//2 for i in range(len(ys)): cnt = ft.sum(i, i+1) S -= cnt*(cnt-1)//2 print((P-Q)*(R*S)**(-0.5))