#include<bits/stdc++.h>
using namespace std;

const double eps=1e-5;
int cmp(double x)
{
	if (fabs(x)<eps) return 0;
	if (x>0) return 1;
	else return -1;
}

const double PI=acos(-1.0);
double sqr(double x)
{
	return x*x;
}
struct point
{
	double x,y;
	point() {}
	point(double a,double b): x(a),y(b) {}
	void input()
	{
		scanf("%lf%lf",&x,&y);
	}
	void output(string s = "")
	{
		cout<<s<<" ";
		printf("%.5lf %.5lf\n",x,y);
	}
	friend point operator + (point a,point b)
	{
		return point(a.x+b.x,a.y+b.y);
	}
	friend point operator - (point a,point b)
	{
		return point(a.x-b.x,a.y-b.y);
	}
	friend bool operator == (point a,point b)
	{
		return cmp(a.x-b.x)==0 && cmp(a.y-b.y)==0;
	}
	friend point operator * (point a,double b)
	{
		return point(a.x*b,a.y*b);
	}
	friend point operator * (double a,point b)
	{
		return point(a*b.x,a*b.y);
	}
	friend point operator / (point a,double b)
	{
		return point(a.x/b,a.y/b);
	}
	double norm()
	{
		return sqrt(sqr(x)+sqr(y));
	}
};
double det(point a,point b)
{
	return a.x*b.y-a.y*b.x;
}
double dot(point a,point b)
{
	return a.x*b.x+a.y*b.y;
}
double dist(point a,point b)
{
	return (a-b).norm();
}


point rotate(point p,double cost,double sint)
{
	double x=p.x,y=p.y;
	return point(x*cost-y*sint,x*sint+y*cost);
}
pair<point,point> crosspoint(point ap,double ar,point bp,double br)
{
	double d=(ap-bp).norm();
	double cost=(ar*ar+d*d-br*br)/(2*ar*d);
	double sint=sqrt(1.-cost*cost);
	//cout<<"DDD "<<d<<" "<<cost<<" "<<sint<<endl;
	//ap.output("AP");bp.output("BP");
	//cout<<ar<<" "<<br<<endl;
	point v=(bp-ap)/(bp-ap).norm()*ar;
	return make_pair(ap+rotate(v,cost,-sint),ap+rotate(v,cost,sint));
}
bool checkcross(point ap,double ar,point bp,double br)
{
	double d=(ap-bp).norm();
	if (cmp(ar+br-d)<=0) return false;
	else return true;
}

const double sin25=sin(25.0/180*PI);
const double cos25=cos(25.0/180*PI);
void getCir(point a,point b,double &R1,point &mid1,double &R2,point &mid2)
{
	double d=(a-b).norm();
	R1=R2=d/(2*sin25);
	double dis=R1*cos25;
	
	point hal=(a+b)/2;
	point vex,cc;
	
	cc=(a-b)/(a-b).norm();
	swap(cc.x,cc.y);
	
	vex=cc;vex.x=-vex.x;
	mid1=hal+vex*dis;
	
	vex=cc;vex.y=-vex.y;
	mid2=hal+vex*dis;
	
	
}

//v  theta
pair<double,double> getvt(point a,point b)
{
	pair<double,double> res;
	res=make_pair(1e30,0);
	if (cmp(b.x-a.x)==0) return res;
	double k=(b.y-a.y)/(b.x-a.x);
	double A,B;
	A=(k*a.x-a.y)/(a.x*a.x);
	B=k-2*A*a.x;
	if (A>=0) return res;
	if (cmp((b-a).x)<0) return res;
	
	/*a.output("LAS");(b-a).output("K  ");
	printf("%.5lf %.5lf\n",A,B);
	printf("RES   %.5lf\n",A*a.x*a.x+B*a.x);
	printf("TRK   %.5lf\n",(b-a).y/(b-a).x);
	printf("WOK   %.5lf\n",2*A*a.x+B);*/
	
	
	
	double g=9.8;
	double v,theta;
	
	theta=atan(B);
	v=sqrt(-g/(2*A*sqr(cos(theta))));
	
	res=make_pair(v,theta);
	return res;
	
}


point p[4];
double theta,ver;
point h[5];
double R[5];



void solve2(int idl,int idr)
{
	//if (checkcross(h[idl],R[idl],h[idr],R[idr])==false) return;
	
	pair<point,point> res;
	res=crosspoint(h[idl],R[idl],h[idr],R[idr]);
	
	point ans;
	if (res.first==p[2]) ans=res.second;
	else ans=res.first;
	
	if (cmp(50.0-acos(dot(p[1]-ans,p[3]-ans)/((p[1]-ans).norm()*(p[3]-ans).norm()))/PI*180.0)!=0) return;
	if (cmp(25.0-acos(dot(p[1]-ans,p[2]-ans)/((p[1]-ans).norm()*(p[2]-ans).norm()))/PI*180.0)!=0) return;
	if (cmp(25.0-acos(dot(p[2]-ans,p[3]-ans)/((p[2]-ans).norm()*(p[3]-ans).norm()))/PI*180.0)!=0) return;	
	//cout<<dot(p[1]-ans,p[3]-ans)<<endl;
	//res.first.output("FIR");res.second.output("SEC");
	//ans.output("ANS");
	
	//printf("ANG %.5lf\n",acos(dot(p[1]-ans,p[3]-ans)/((p[1]-ans).norm()*(p[3]-ans).norm()))/PI*180.0);
	//printf("ANG %.5lf\n",acos(dot(p[1]-ans,p[2]-ans)/((p[1]-ans).norm()*(p[2]-ans).norm()))/PI*180.0);
	//printf("ANG %.5lf\n",acos(dot(p[2]-ans,p[3]-ans)/((p[2]-ans).norm()*(p[3]-ans).norm()))/PI*180.0);
	

	pair<double,double> f;
	f=getvt(ans,p[2]);
	f.second=f.second/PI*180.0;
	
	//point(f.first,f.second).output("F  ");
	
	
	if (cmp(f.second-10)>=0 && cmp(f.second-80)<=0 && cmp(f.first-50)>=0 && cmp(f.first-5000)<=0)
		if (cmp(f.first-ver)<=0) theta=f.second,ver=f.first;
}

void solve()
{
	getCir(p[1],p[2],R[1],h[1],R[2],h[2]);
	getCir(p[2],p[3],R[3],h[3],R[4],h[4]);
	
	/*for (int i=1;i<=4;i++)
	{
		cout<<R[i]<<" ";h[i].output();
	}
	cout<<endl;*/
	solve2(1,3);//puts("==========");
	solve2(1,4);//puts("==========");
	solve2(2,3);//puts("==========");
	solve2(2,4);//puts("==========");
	
}

void work(int CASE)
{
	for (int i=1;i<=3;i++) p[i].input();
	theta=0;ver=1e20;
	
	solve();
	swap(p[1],p[2]);
	solve();
	swap(p[2],p[3]);
	solve();
	
	printf("Case %d: %.6lf\n",CASE,theta);
}

int main()
{
	//freopen("input.txt","r",stdin);
	//freopen("ans.txt","w",stdout);
	int T;
	scanf("%d",&T);
	for (int i=1;i<=T;i++) work(i);
}
