/* Beautiful Codes are MUCH better than 'Shorter' ones ! user : triveni date : 20/04/2018 time : 00:10:17 */ #include using namespace std; #define pii std::pair #define vi std::vector #define sz(v) (int)(v.size()) #define mp(a,b) make_pair(a,b) #define pb(a) push_back(a) #define each(it,s) for(auto it = s.begin(); it != s.end(); ++it) #define rep(i, n) for(int i = 0; i < (n); ++i) #define rep1(i, n) for(int i = 1; i <= (n); ++i) #define all(v) v.begin(), v.end() #define scan(n) scanf("%d", &n) #define scan2(n, m) scanf("%d%d", &n, &m) #define pin(n) printf("%d\n",n) #define pis(n) printf("%d ",n) #define pll(n) printf("%lld\n", n) #define X first #define Y second typedef long long ll; const ll mod = 1000000007; inline int pow_(ll a, int n, int p=mod){ int r=1;while(n){if(n&1)r=r*a%p;n>>=1;a=a*a%p;}return r;} inline int inv_(int a) {return pow_(a, mod-2, mod);} inline int add(int a, int b){a+=b;if(a>=mod)a-=mod;return a;} inline void adds(int& a, int b){a+=b;if(a>=mod)a-=mod;} inline int mul(int a, int b){return a*1ll*b%mod;} inline void muls(int& a, int b){a=a*1ll*b%mod;} inline int sub(int a, int b){a-=b;if(a<0)a+=mod;return a;} const double inf = 1e100; double getTime(int i, int j, bool dirI, bool dirJ, const vector& v) { if(dirI == 0 && dirJ == 1) return inf; if(dirI == 1 && dirJ == 0) { double dx = abs(v[i].X - v[j].X); double vx = abs(v[i].Y + v[j].Y); return dx / vx; } if((dirI == 0 && v[i].Y >= v[j].Y) || (dirI == 1 && v[i].Y <= v[j].Y)) { return inf; } double dx = abs(v[i].X - v[j].X); double vx = abs(v[i].Y - v[j].Y); return dx / vx; } bool isPossible(double t, const vector & v) { int n = sz(v); vector dir(n, 0); for (int i = 1; i < n; ++i) { bool curDir = false; //dir[i-1]; bool f = true; for (int j = 0; j < i && f; ++j) { double tmpTime = getTime(j, i, dir[j], curDir, v); if(tmpTime < t) f = false; } if(!f) { curDir ^= true; f = true; for (int j = 0; j < i && f; ++j) { double tmpTime = getTime(j, i, dir[j], curDir, v); if(tmpTime < t) f = false; } if(!f) return false; } dir[i] = curDir; } return true; } int getInt(char endChar) { int x = 0; char ch = getchar(); assert(ch >= '0' && ch <= '9'); while(ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); } assert(ch == endChar); return x; } int main() { int T = getInt('\n'); assert(1 <= T && T <= 100); while(T--) { int n = getInt('\n'); assert(1 <= n && n <= 50); vector inp(n); rep(i, n) { int u = getInt(' '); int v = getInt('\n'); assert(0 < u && u <= 1e9); assert(0 < v && v <= 1e9); inp[i] = mp(u, v); } sort(all(inp)); rep(i, n-1) assert(inp[i].X < inp[i+1].X); double lo = 0, hi = 1e20, mid = 0; for (int iter = 0; iter < 100; ++iter) { mid = (hi + lo) * 0.5; if(isPossible(mid, inp)) lo = mid; else hi = mid; } double ansT = mid; if(ansT >= 1e15) ansT = -1; printf("%.10lf\n", ansT); } return 0; }