#include using namespace std; const int MaxN = (int)2.5e5 + 10; const int INF = 1e9; int n, en; int x[MaxN], h[MaxN]; int b[MaxN], sz; long long fenw[2][MaxN]; long long get(long long fenw[], int x) { long long res = 0; while (x > 0) { res += fenw[x]; x &= x + 1, --x; } return res; } void upd(long long fenw[], int x, long long val) { while (x <= n) { fenw[x] += val; x |= x + 1; } } int fnd(int x) { return lower_bound(b, b + sz, x) - b; } long long readInt(long long l,long long r,char endd){ long long x=0; int cnt=0; int fi=-1; bool is_neg=false; while(true){ char g=getchar(); if(g=='-'){ assert(fi==-1); is_neg=true; continue; } if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(fi!=0 || cnt==1); assert(fi!=0 || is_neg==false); assert(!(cnt>19 || ( cnt==19 && fi>1) )); } else if(g==endd){ if(is_neg){ x= -x; } assert(l<=x && x<=r); return x; } else { assert(false); } } } string readString(int l,int r,char endd){ string ret=""; int cnt=0; while(true){ char g=getchar(); assert(g!=-1); if(g==endd){ break; } cnt++; ret+=g; } assert(l<=cnt && cnt<=r); return ret; } long long readIntSp(long long l,long long r){ return readInt(l,r,' '); } long long readIntLn(long long l,long long r){ return readInt(l,r,'\n'); } string readStringLn(int l,int r){ return readString(l,r,'\n'); } string readStringSp(int l,int r){ return readString(l,r,' '); } void solve() { n = readIntLn(1, 250000); assert (1 <= n && n <= 250000); en += n; assert (1 <= en && en <= 500000); sz = 0; map < int, vector < pair < int, int > > > all; memset(fenw, 0, sizeof(fenw)); for (int i = 1; i <= n; ++i) { x[i] = readIntSp(1, INF); h[i] = readIntLn(1, INF); assert (x[i] <= INF && x[i] >= 1); assert (h[i] <= INF && h[i] >= 1); b[sz++] = x[i]; all[x[i] - h[i]].push_back(make_pair(x[i], h[i])); } sort(b, b + sz); sz = unique(b, b + sz) - b; assert (sz == n); double ans = -1e+40; for (map < int, vector < pair < int, int > > > :: iterator it = all.begin(); it != all.end(); ++it) { vector < pair < int, int > > &v = it->second; sort(v.begin(), v.end()); double have = 0; for (int i = 0; i < (int)v.size(); ++i) { if (i + 1 < (int)v.size()) { assert (v[i].first < v[i + 1].first && v[i].second < v[i + 1].second); int a = fnd(v[i].first), b = fnd(v[i + 1].first); double lab = hypotl(v[i].first - v[i + 1].first + .0, v[i].second - v[i + 1].second + .0); long long w = get(fenw[1], b) - get(fenw[1], a); w += (get(fenw[0], b) - get(fenw[0], a)) * it->first; have += lab - w; ans = max(ans, have); have = max(have, 0.0); } upd(fenw[0], fnd(v[i].first), +1); upd(fenw[1], fnd(v[i].first), -it->first); } } if (ans == -1e+40) { printf("-1\n"); } else { printf("%.9lf\n", ans); } } int main() { // freopen("input.txt", "r", stdin); int t = readIntLn(1, 100); while (t --> 0) { solve(); } assert(getchar()==-1); return 0; }