#include <bits/stdc++.h>
using namespace std;
double distance(double x1, double y1, double z1, double x2, double y2, double z2)
{
double value;
value = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2);
value = sqrt(value);
return value;
}
double in_point(double x1, double y1, double z1, double x2, double y2, double z2,double m, double &x, double &y, double &z)
{
x = m * x2 + (1-m)*x1;
y = m * y2 + (1-m)*y1;
z = m * z2 + (1-m)*z1;
}
double ternery_search(double x1, double y1,double z1,double x2,double y2,double z2,double x3,double y3,double z3)
{
double low = 0;
double high = 1;
double mid;
int counter = 0;
double ans = 1000000000;
while(counter<= 300)
{
counter++;
double diff = (high - low);
double mid1 = low+ diff/3;
double mid2 = low+ (2*diff)/3;
double px,py,pz;
in_point(x1,y1,z1,x2,y2,z2,mid1,px,py,pz);
double qx,qy,qz;
in_point(x1,y1,z1,x2,y2,z2,mid2,qx,qy,qz);
double dis1 = distance(px,py,pz,x3,y3,z3);
double dis2 = distance(qx,qy,qz,x3,y3,z3);
ans = min(ans,dis1);
ans = min(ans,dis2);
if(dis1<dis2)
{
high = mid2;
}
else
{
low = mid1;
}
}
return ans;
}
int main(void)
{
int T,t;
scanf("%d",&T);
for(t = 1; t <= T; t++)
{
double x1,y1,z1,x2,y2,z2,x3,y3,z3;
scanf("%lf %lf %lf %lf %lf %lf %lf %lf %lf",&x1,&y1,&z1,&x2,&y2,&z2,&x3,&y3,&z3);
double value = ternery_search(x1,y1,z1,x2,y2,z2,x3,y3,z3);
printf("Case %d: %0.10lf\n",t,value);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpkb3VibGUgZGlzdGFuY2UoZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB6MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGRvdWJsZSB6MikKewogICAgZG91YmxlIHZhbHVlOwogICAgdmFsdWUgPSAoeDEteDIpKih4MS14MikgKyAoeTEteTIpKih5MS15MikgKyAoejEtejIpKih6MS16Mik7CiAgICB2YWx1ZSA9IHNxcnQodmFsdWUpOwogICAgcmV0dXJuIHZhbHVlOwp9Cgpkb3VibGUgaW5fcG9pbnQoZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB6MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGRvdWJsZSB6Mixkb3VibGUgbSwgZG91YmxlICZ4LCBkb3VibGUgJnksIGRvdWJsZSAmeikKewoKICAgIHggPSBtICogeDIgKyAoMS1tKSp4MTsKICAgIHkgPSBtICogeTIgKyAoMS1tKSp5MTsKICAgIHogPSBtICogejIgKyAoMS1tKSp6MTsKfQoKZG91YmxlIHRlcm5lcnlfc2VhcmNoKGRvdWJsZSB4MSwgZG91YmxlIHkxLGRvdWJsZSB6MSxkb3VibGUgeDIsZG91YmxlIHkyLGRvdWJsZSB6Mixkb3VibGUgeDMsZG91YmxlIHkzLGRvdWJsZSB6MykKewoKICAgIGRvdWJsZSBsb3cgPSAwOwogICAgZG91YmxlIGhpZ2ggPSAxOwogICAgZG91YmxlIG1pZDsKICAgIGludCBjb3VudGVyID0gMDsKICAgIGRvdWJsZSBhbnMgPSAxMDAwMDAwMDAwOwogICAgd2hpbGUoY291bnRlcjw9IDMwMCkKICAgIHsKICAgICAgICBjb3VudGVyKys7CiAgICAgICAgZG91YmxlIGRpZmYgPSAoaGlnaCAtIGxvdyk7CiAgICAgICAgZG91YmxlIG1pZDEgPSBsb3crIGRpZmYvMzsKICAgICAgICBkb3VibGUgbWlkMiA9IGxvdysgKDIqZGlmZikvMzsKICAgICAgICBkb3VibGUgcHgscHkscHo7CiAgICAgICAgaW5fcG9pbnQoeDEseTEsejEseDIseTIsejIsbWlkMSxweCxweSxweik7CiAgICAgICAgZG91YmxlIHF4LHF5LHF6OwogICAgICAgIGluX3BvaW50KHgxLHkxLHoxLHgyLHkyLHoyLG1pZDIscXgscXkscXopOwogICAgICAgIGRvdWJsZSBkaXMxID0gZGlzdGFuY2UocHgscHkscHoseDMseTMsejMpOwogICAgICAgIGRvdWJsZSBkaXMyID0gZGlzdGFuY2UocXgscXkscXoseDMseTMsejMpOwogICAgICAgIGFucyA9IG1pbihhbnMsZGlzMSk7CiAgICAgICAgYW5zID0gbWluKGFucyxkaXMyKTsKICAgICAgICBpZihkaXMxPGRpczIpCiAgICAgICAgewogICAgICAgICAgICBoaWdoID0gbWlkMjsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgbG93ID0gbWlkMTsKICAgICAgICB9CgogICAgfQogICAgcmV0dXJuIGFuczsKCn0KCgoKaW50IG1haW4odm9pZCkKewoKICAgIGludCBULHQ7CiAgICBzY2FuZigiJWQiLCZUKTsKICAgIGZvcih0ID0gMTsgdCA8PSBUOyB0KyspCiAgICB7CiAgICAgICAgZG91YmxlIHgxLHkxLHoxLHgyLHkyLHoyLHgzLHkzLHozOwogICAgICAgIHNjYW5mKCIlbGYgJWxmICVsZiAlbGYgJWxmICVsZiAlbGYgJWxmICVsZiIsJngxLCZ5MSwmejEsJngyLCZ5MiwmejIsJngzLCZ5MywmejMpOwogICAgICAgIGRvdWJsZSB2YWx1ZSA9IHRlcm5lcnlfc2VhcmNoKHgxLHkxLHoxLHgyLHkyLHoyLHgzLHkzLHozKTsKICAgICAgICBwcmludGYoIkNhc2UgJWQ6ICUwLjEwbGZcbiIsdCx2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gMDsKCn0K