#include #include #include using namespace std; struct entry { int val; mutable int count; entry(int val) : val(val), count(1) { }; }; struct mycomp { bool operator()(const entry lhs, const entry rhs) { return lhs.val < rhs.val; } }; int main() { int n; while (cin >> n) { set diffset; set addset; for (int i = 0; i < n; i++) { int a, b; cin >> a >> b; set::iterator finddiff, findadd; finddiff = diffset.find(entry(a - b)); findadd = addset.find(entry(a + b)); if (finddiff == diffset.end()) { diffset.insert(entry(a - b)); } else { finddiff->count++; } if (findadd == addset.end()) { addset.insert(entry(a + b)); } else { findadd->count++; } } double prob = 0; for (set::iterator it = diffset.begin(); it != diffset.end(); it++) { int k = it->count; prob += (double)k / (double)n * (double)(k - 1) / (double) n; } for (set::iterator it = addset.begin(); it != addset.end(); it++) { int k = it->count; prob += (double)k / (double)n * (double)(k - 1) / (double) n; } printf("%.9f\n", prob); } return 0; }