#include <bits/stdc++.h>
using namespace std;
#define mp(a,b) make_pair(a,b)
#define ff first
#define setp(x) setprecision(x)<<fixed
#define ss second
#define fori(v) for(lli i=0; i<v; i++)
#define forj(v) for(int j=0; j<v; j++)
#define fork(v) for(int k=0; k<v; k++)
#define forl(v) for(int l=0; l<v; l++)
#define fort(v) for(int t=0; t<v; t++)
#define forz(v) for(int z=0; z<v; z++)
#define lli long long int
#define MAX 220020
#define double long double
int inf = pow(10,9);
lli modulo = pow(10,9)+7;
double eps = 1e-11;
ifstream in;
ofstream out;
//#define cin in
//#define cout out
struct point{
double x,y,z;
point(){}
point(double arr[3]) : x(arr[0]) , y(arr[1]), z(arr[2]){}
point(double x1,double y1,double z1) : x(x1), y(y1) , z(z1){}
};
struct sphere{
point centre;
double radius;
sphere(){ }
sphere(point a, double r) : centre(a), radius(r){}
};
struct vect{
double x,y,z;
vect(){ }
vect(double x1,double y1, double z1) : x(x1) , y(y1), z(z1){}
vect(point a1,point b1): x(b1.x-a1.x) , y(b1.y - a1.y ) , z(b1.z - a1.z){ }
vect(double c, vect other) : x(other.x * c) , y(other.y * c) , z(other.z * c){}
};
double dot_product(vect a, vect b){
return a.x*b.x + a.y*b.y + a.z * b.z;
}
vect subtract(vect a, vect b){ // subtract b from a
return vect(a.x-b.x , a.y - b.y , a.z-b.z);
}
double leng(vect a){
return sqrt(a.x*a.x + a.y*a.y + a.z*a.z);
}
double find_distance(point a1, point b1, point c1){ // find distance from point a1 to the line defined by b1 and c1
vect a(b1,c1);
vect b(b1,a1);
double constant = dot_product(a,b)/dot_product(a,a);
vect c(constant,a);
return leng(subtract(b,c));
}
void deal(){
cin.tie(0);
ios_base::sync_with_stdio(0);
int t;
cin>>t;
forl(t){
double xyz[3][3];
fori(2)
forj(3)
cin>>xyz[i][j];
double mv[3];
fori(3)
cin>>mv[i];
fori(3)
cin>>xyz[2][i];
double r;
cin>>r;
point still(xyz[0]),move(xyz[1]),cent(xyz[2]);
sphere s(cent,r);
double a = 0 , b = pow(10,9);
while((b-a)>eps){
double c = (a+b)/2;
double x1 = move.x + c*mv[0], y1 = move.y + c*mv[1], z1 = move.z + c*mv[2];
double distance = find_distance(s.centre,still,point(x1,y1,z1));
if(distance > s.radius)
b=c;
else
a=c;
}
cout<<setp(6)<<a<<'\n';
}
}
int main() {
deal();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbXAoYSxiKSBtYWtlX3BhaXIoYSxiKQojZGVmaW5lIGZmIGZpcnN0CiNkZWZpbmUgc2V0cCh4KSBzZXRwcmVjaXNpb24oeCk8PGZpeGVkCiNkZWZpbmUgc3Mgc2Vjb25kCiNkZWZpbmUgZm9yaSh2KSBmb3IobGxpIGk9MDsgaTx2OyBpKyspCiNkZWZpbmUgZm9yaih2KSBmb3IoaW50IGo9MDsgajx2OyBqKyspCiNkZWZpbmUgZm9yayh2KSBmb3IoaW50IGs9MDsgazx2OyBrKyspCiNkZWZpbmUgZm9ybCh2KSBmb3IoaW50IGw9MDsgbDx2OyBsKyspCiNkZWZpbmUgZm9ydCh2KSBmb3IoaW50IHQ9MDsgdDx2OyB0KyspCiNkZWZpbmUgZm9yeih2KSBmb3IoaW50IHo9MDsgejx2OyB6KyspCiNkZWZpbmUgbGxpIGxvbmcgbG9uZyBpbnQKI2RlZmluZSBNQVggMjIwMDIwCiNkZWZpbmUgZG91YmxlIGxvbmcgZG91YmxlCmludCBpbmYgPSBwb3coMTAsOSk7CmxsaSBtb2R1bG8gPSBwb3coMTAsOSkrNzsKZG91YmxlIGVwcyA9IDFlLTExOwppZnN0cmVhbSBpbjsKb2ZzdHJlYW0gb3V0OwovLyNkZWZpbmUgY2luIGluCi8vI2RlZmluZSBjb3V0IG91dApzdHJ1Y3QgcG9pbnR7Cglkb3VibGUgeCx5LHo7Cglwb2ludCgpe30KCXBvaW50KGRvdWJsZSBhcnJbM10pIDogeChhcnJbMF0pICwgeShhcnJbMV0pLCB6KGFyclsyXSl7fQoJcG9pbnQoZG91YmxlIHgxLGRvdWJsZSB5MSxkb3VibGUgejEpIDogeCh4MSksIHkoeTEpICwgeih6MSl7fQp9OwpzdHJ1Y3Qgc3BoZXJlewoJcG9pbnQgY2VudHJlOwoJZG91YmxlIHJhZGl1czsKCXNwaGVyZSgpeyB9CglzcGhlcmUocG9pbnQgYSwgZG91YmxlIHIpIDogY2VudHJlKGEpLCByYWRpdXMocil7fQp9OwpzdHJ1Y3QgdmVjdHsKCWRvdWJsZSB4LHksejsKCXZlY3QoKXsJfQoJdmVjdChkb3VibGUgeDEsZG91YmxlIHkxLCBkb3VibGUgejEpIDogeCh4MSkgLCB5KHkxKSwgeih6MSl7fQoJdmVjdChwb2ludCBhMSxwb2ludCBiMSk6IHgoYjEueC1hMS54KSAsIHkoYjEueSAtIGExLnkgKSAsIHooYjEueiAtIGExLnopeyB9Cgl2ZWN0KGRvdWJsZSBjLCB2ZWN0IG90aGVyKSA6IHgob3RoZXIueCAqIGMpICwgeShvdGhlci55ICAqIGMpICwgeihvdGhlci56ICogYyl7fQp9Owpkb3VibGUgZG90X3Byb2R1Y3QodmVjdCBhLCB2ZWN0IGIpewoJcmV0dXJuIGEueCpiLnggKyBhLnkqYi55ICsgYS56ICogYi56Owp9IAp2ZWN0IHN1YnRyYWN0KHZlY3QgYSwgdmVjdCBiKXsgLy8gc3VidHJhY3QgYiBmcm9tIGEKCXJldHVybiB2ZWN0KGEueC1iLnggLCBhLnkgLSBiLnkgLCBhLnotYi56KTsKfQpkb3VibGUgbGVuZyh2ZWN0IGEpewoJcmV0dXJuIHNxcnQoYS54KmEueCArIGEueSphLnkgKyBhLnoqYS56KTsKfQpkb3VibGUgZmluZF9kaXN0YW5jZShwb2ludCBhMSwgcG9pbnQgYjEsIHBvaW50IGMxKXsgLy8gZmluZCBkaXN0YW5jZSBmcm9tIHBvaW50IGExIHRvIHRoZSBsaW5lIGRlZmluZWQgYnkgYjEgYW5kIGMxCgl2ZWN0IGEoYjEsYzEpOwoJdmVjdCBiKGIxLGExKTsKCWRvdWJsZSBjb25zdGFudCA9IGRvdF9wcm9kdWN0KGEsYikvZG90X3Byb2R1Y3QoYSxhKTsKCXZlY3QgYyhjb25zdGFudCxhKTsKCXJldHVybiBsZW5nKHN1YnRyYWN0KGIsYykpOwp9CnZvaWQgZGVhbCgpewoJY2luLnRpZSgwKTsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CglpbnQgdDsKCWNpbj4+dDsKCWZvcmwodCl7CgkJZG91YmxlIHh5elszXVszXTsKCQlmb3JpKDIpCgkJCWZvcmooMykKCQkJCWNpbj4+eHl6W2ldW2pdOwoJCWRvdWJsZSBtdlszXTsKCQlmb3JpKDMpCgkJCWNpbj4+bXZbaV07CgkJZm9yaSgzKQoJCQljaW4+Pnh5elsyXVtpXTsKCQlkb3VibGUgcjsKCQljaW4+PnI7CgkJcG9pbnQgc3RpbGwoeHl6WzBdKSxtb3ZlKHh5elsxXSksY2VudCh4eXpbMl0pOwoJCXNwaGVyZSBzKGNlbnQscik7CgkJZG91YmxlIGEgPSAwICwgYiA9IHBvdygxMCw5KTsKCQl3aGlsZSgoYi1hKT5lcHMpewoJCQlkb3VibGUgYyA9IChhK2IpLzI7CgkJCWRvdWJsZSB4MSA9IG1vdmUueCArIGMqbXZbMF0sIHkxID0gbW92ZS55ICsgYyptdlsxXSwgejEgPSBtb3ZlLnogKyBjKm12WzJdOwoJCQlkb3VibGUgZGlzdGFuY2UgPSBmaW5kX2Rpc3RhbmNlKHMuY2VudHJlLHN0aWxsLHBvaW50KHgxLHkxLHoxKSk7CgkJCWlmKGRpc3RhbmNlID4gcy5yYWRpdXMpCgkJCQliPWM7CgkJCWVsc2UKCQkJCWE9YzsKCQl9CgkJY291dDw8c2V0cCg2KTw8YTw8J1xuJzsKCX0KfQppbnQgbWFpbigpIHsKCWRlYWwoKTsKfSAgICA=