#include #define REP(i, n) for(int i = 0 ; i< (int)n; ++i) #define X first #define Y second using namespace std; typedef pair ii; bool cmp1(ii a, ii b){ int sa = a.X + a.Y, sb = b.X + b.Y; int ma = a.X - a.Y, mb = b.X - b.Y; if(sa == sb) return ma <= mb; return sa <= sb; } bool cmp2(ii a, ii b){ int sa = a.X + a.Y, sb = b.X + b.Y; int ma = a.X - a.Y, mb = b.X - b.Y; if(ma == mb) return sa <= sb; return ma <= mb; } bool testcase(){ int n; if(!(cin >> n))return false; long long sm = 0; vector pnts; int x,y; REP(i, n){ cin >> x >> y; pnts.push_back({x,y}); } sort(pnts.begin(), pnts.end(), cmp1); int lastc = -1; long long cnt = 0; REP(i, pnts.size()){ int c = pnts[i].X + pnts[i].Y; if(c == lastc) ++cnt; else{ lastc = c; sm += (cnt * (cnt-1))/2; cnt = 1; } } sm += (cnt * (cnt-1))/2; sort(pnts.begin(), pnts.end(), cmp2); lastc = -1; cnt = 0; REP(i, pnts.size()){ int c = pnts[i].X - pnts[i].Y; if(c == lastc) ++cnt; else{ lastc = c; sm += (cnt * (cnt-1))/2; cnt = 1; } } sm += (cnt * (cnt-1))/2; long long total = n*1ll*n; cout << setprecision(10) << (2*(double)sm)/((double)total) << endl; return true; } int main(){ while(testcase()); return 0; }