import math
def crossP(a,b,c):
c[0]=a[1]*b[2]-a[2]*b[1]
c[1]=a[2]*b[0]-a[0]*b[2]
c[2]=a[0]*b[1]-a[1]*b[0]
def distance(x1,y1,z1,x2,y2,z2):
return math.
sqrt((x2
-x1
)**2+(y2
-y1
)**2+(z2
-z1
)**2)
def getMagnitude(a):
return math.
sqrt(a
[0]*a
[0]+a
[1]*a
[1]+a
[2]*a
[2])
def getQ(q,t,d):
return [(q[0]+(d[0]*t)),(q[1]+(d[1]*t)),(q[2]+(d[2]*t))]
def intersects(q,p,c,r):
cp,cq=[c[0]-p[0],c[1]-p[1],c[2]-p[2]],[c[0]-q[0],c[1]-q[1],c[2]-q[2]]
CP=[0,0,0]
crossP(cp,cq,CP)
CP=getMagnitude(CP)
d=distance(q[0],q[1],q[2],p[0],p[1],p[2])
return True if ((CP/d)<r) else False
def bs(low,high,p,q,r,d,c):
ans=0
mid=0
count=100
while(count):
mid=(low+high)/2
q1=getQ(q,mid,d)
if(intersects(q1,p,c,r)):
low=mid
else:
ans,high=mid,mid
count-=1
return ans
def main():
t=int(input())
for _ in range(t):
px,py,pz,qx,qy,qz,dx,dy,dz,cx,cy,cz,r=map(int,input().split())
p=[px,py,pz]
c=[cx,cy,cz]
q=[qx,qy,qz]
d=[dx,dy,dz]
ans=bs(0,1000000000,p,q,r,d,c)
print(ans)
main()
aW1wb3J0IG1hdGgKZGVmIGNyb3NzUChhLGIsYyk6CiAgICBjWzBdPWFbMV0qYlsyXS1hWzJdKmJbMV0KICAgIGNbMV09YVsyXSpiWzBdLWFbMF0qYlsyXQogICAgY1syXT1hWzBdKmJbMV0tYVsxXSpiWzBdCgpkZWYgZGlzdGFuY2UoeDEseTEsejEseDIseTIsejIpOgogICAgcmV0dXJuIG1hdGguc3FydCgoeDIteDEpKioyKyh5Mi15MSkqKjIrKHoyLXoxKSoqMikKCmRlZiBnZXRNYWduaXR1ZGUoYSk6CiAgICByZXR1cm4gbWF0aC5zcXJ0KGFbMF0qYVswXSthWzFdKmFbMV0rYVsyXSphWzJdKQoKZGVmIGdldFEocSx0LGQpOgogICAgcmV0dXJuIFsocVswXSsoZFswXSp0KSksKHFbMV0rKGRbMV0qdCkpLChxWzJdKyhkWzJdKnQpKV0KCmRlZiBpbnRlcnNlY3RzKHEscCxjLHIpOgogICAgY3AsY3E9W2NbMF0tcFswXSxjWzFdLXBbMV0sY1syXS1wWzJdXSxbY1swXS1xWzBdLGNbMV0tcVsxXSxjWzJdLXFbMl1dCiAgICBDUD1bMCwwLDBdCiAgICBjcm9zc1AoY3AsY3EsQ1ApCiAgICBDUD1nZXRNYWduaXR1ZGUoQ1ApCiAgICBkPWRpc3RhbmNlKHFbMF0scVsxXSxxWzJdLHBbMF0scFsxXSxwWzJdKQogICAgcmV0dXJuIFRydWUgaWYgKChDUC9kKTxyKSBlbHNlIEZhbHNlCgpkZWYgYnMobG93LGhpZ2gscCxxLHIsZCxjKToKICAgIGFucz0wCiAgICBtaWQ9MAogICAgY291bnQ9MTAwCiAgICB3aGlsZShjb3VudCk6CiAgICAgICAgbWlkPShsb3craGlnaCkvMgogICAgICAgIHExPWdldFEocSxtaWQsZCkKICAgICAgICBpZihpbnRlcnNlY3RzKHExLHAsYyxyKSk6CiAgICAgICAgICAgIGxvdz1taWQKICAgICAgICBlbHNlOgogICAgICAgICAgICBhbnMsaGlnaD1taWQsbWlkCiAgICAgICAgY291bnQtPTEKICAgIHJldHVybiBhbnMKCmRlZiBtYWluKCk6CiAgICB0PWludChpbnB1dCgpKQogICAgZm9yIF8gaW4gcmFuZ2UodCk6CiAgICAgICAgcHgscHkscHoscXgscXkscXosZHgsZHksZHosY3gsY3ksY3oscj1tYXAoaW50LGlucHV0KCkuc3BsaXQoKSkKICAgICAgICBwPVtweCxweSxwel0KICAgICAgICBjPVtjeCxjeSxjel0KICAgICAgICBxPVtxeCxxeSxxel0KICAgICAgICBkPVtkeCxkeSxkel0KICAgICAgICBhbnM9YnMoMCwxMDAwMDAwMDAwLHAscSxyLGQsYykKICAgICAgICBwcmludChhbnMpCgptYWluKCkK