import math def trig_area(a, c): s = float((a + a + c) / 2) return math.sqrt(s * (s - a) * (s - a) * (s - c)) T = int(input()) for t in range(T): n = int(input()) rec = {} flag = 0 for i in range(n): l_i, a_i = list(map(int, input().split())) if l_i not in rec: rec[l_i] = a_i else: rec[l_i] += a_i data = list(rec.keys()) data.sort(reverse=True) # print(data) n = len(data) area = 0 for i in range(n): l_i, a_i = data[i], rec[data[i]] if a_i>=2: for j in range(i): if l_i *2 > data[j]: tmp = trig_area(l_i, data[j]) if area < tmp: area = tmp if a_i>=3: tmp = trig_area(l_i, l_i) if area < tmp: area = tmp for j in range(i+1, n): # 需要检查底边小于腰的情况,因为底边很大时,面积也会很小 tmp = trig_area(l_i, data[j]) if area < tmp: area = tmp if area != 0:#只要找到了最大腰情况,且检查了底边小于腰的情形,可以证明只要腰小于当前腰,面积都会变小 flag = 1 break if flag==0: print(-1) else: print(round(area,10))