//*******************************************************************************
#include<iostream>
#include<algorithm>
#include<cmath>
#include<stdio.h>
using namespace std;
#define eps 1e-8
int dcmp(double x){
if(fabs(x)<eps)return ;
else return x< ? -:;
}
struct Point3{
double x,y,z;
Point3(double x=,double y=,double z=):x(x),y(y),z(z){}
};
bool operator==(const Point3& a,const Point3& b){
return dcmp(a.x-b.x)== && dcmp(a.y-b.y)== && dcmp(a.z-b.z)== ;
}
typedef Point3 Vector3;
Vector3 operator+(Vector3 A,Vector3 B){
return Vector3(A.x+B.x,A.y+B.y,A.z+B.z);
}
Vector3 operator-(Vector3 A,Vector3 B){
return Vector3(A.x-B.x,A.y-B.y,A.z-B.z);
}
Vector3 operator*(Vector3 A,double p){
return Vector3(A.x*p,A.y*p,A.z*p);
}
Vector3 operator/(Vector3 A,double p){
return Vector3(A.x/p,A.y/p,A.z/p);
}
double Dot(Vector3 A,Vector3 B){return A.x*B.x+A.y*B.y+A.z*B.z;}
double Length(Vector3 A){return sqrt(Dot(A,A));}
double Angle(Vector3 A,Vector3 B){return acos(Dot(A,B)/Length(A)/Length(B));}
//叉积
Vector3 Cross(Vector3 A,Vector3 B){
return Vector3(A.y*B.z-A.z*B.y,A.z*B.x-A.x*B.z,A.x*B.y-A.y*B.x);
}
//点p到射线AB的距离
double DDSXJL(Point3 p,Point3 A,Point3 B){
if(A==B)return Length(p-A);
Vector3 v1=B-A,v2=p-A;
if(dcmp(Dot(v1,v2))<)return Length(v2);
else return Length(Cross(v1,v2))/Length(v1);
}
//******************************************************************************
int main(){
Point3 now[],fut[],delta;
int T;cin>>T;
for(int kase=;kase<=T;kase++){
int time;cin>>time;
cin>>now[].x>>now[].y>>now[].z;
cin>>fut[].x>>fut[].y>>fut[].z;
cin>>now[].x>>now[].y>>now[].z;
cin>>fut[].x>>fut[].y>>fut[].z;
Point3 B;//坐标原点
delta=now[]-now[];//相对初位置
Vector3 speed=((fut[]-now[])-(fut[]-now[]));//相对速度
printf("Case %d: %.4lf\n",kase,DDSXJL(B,delta,delta+speed));//答案就是原点到轨迹的距离
}return ;
}
//*******************************************************************************