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))