#include #include #define rep(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++) using namespace atcoder; using namespace std; typedef long long ll; template struct CC { bool initialized; vector xs; CC() : initialized(false) {} void add(T x) { xs.push_back(x); } void init() { sort(xs.begin(), xs.end()); xs.erase(unique(xs.begin(), xs.end()), xs.end()); initialized = true; } int operator()(T x) { if (!initialized) init(); return upper_bound(xs.begin(), xs.end(), x) - xs.begin() - 1; } T operator[](int i) { if (!initialized) init(); return xs[i]; } int size() { if (!initialized) init(); return xs.size(); } }; ll f(int n, vector x, vector y) { ll ret = 0; CC cc; rep(i, 0, n) { cc.add(y[i]); } rep(i, 0, n) { y[i] = cc(y[i]); } vector> p(n); rep(i, 0, n) p[i] = {x[i], -y[i]}; sort(p.begin(), p.end()); fenwick_tree fw(n); for (auto [x, y] : p) { y *= -1; ret += fw.sum(0, y); fw.add(y, 1); } return ret; } ll g(int n, vector x) { ll ret = 0; map ma; rep(i, 0, n) { ma[x[i]]++; } rep(i, 0, n) { ret += n - ma[x[i]]; } ret /= 2; return ret; } int main() { int n; cin >> n; vector x(n), y(n); rep(i, 0, n) cin >> x[i] >> y[i]; vector xm(n), ym(n); rep(i, 0, n) { xm[i] = -x[i]; ym[i] = -y[i]; } double P = f(n, x, y) + f(n, xm, ym); rep(i, 0, n) { x[i] *= -1; } double Q = f(n, x, y) + f(n, xm, ym); rep(i, 0, n) { x[i] *= -1; } double R = g(n, x); double S = g(n, y); cerr << P << " " << Q << " " << R << " " << S << endl; double ans = (P - Q) / sqrt(R * S); cout << fixed << setprecision(15) << ans << endl; }