#include <iostream>
#include <cstdio>
#include <vector>
#include <complex>
#include <cmath>
#include <algorithm>
using namespace std;

//XY座標
#define X real()
#define Y imag()

// 許容する誤差ε
const double EPS = (1e-10);
// 円周率
const double PI = 3.14159265358979;

// 点の表現
typedef complex<double> P;

// complex<double> の順序を定義する
namespace std {
	bool operator < (const P& a, const P& b) {
		return real(a) != real(b) ? real(a) < real(b) : imag(a) < imag(b);
	}
}

// 2乗する
double sq(double x){
	return x * x;
}

// 2つのスカラーが等しいかどうか
bool equal(double a, double b){
	return ( fabs( a - b ) < EPS );
}
// 2つのベクトルが等しいかどうか
bool eq_v(P a, P b){
	return ( equal( a.X, b.X ) && equal( a.Y, b.Y ) );
}

// 線, 線分, 直線の表現 (これの使い道がまだ不明である !!!)
struct Line{ P pos, dir; };
// [案]
// 直線 => Line 型
// 半直線 => Ray 型
// 線分 => Segment 型

// 多角形の表現 (使わない可能性あり !!!)
typedef vector<P> G;

// 円の表現
struct Circle{
	// 円の中心
	P p;
	// 円の半径
	double r;
	// コンストラクタで初期化
	Circle(P p_, double r_){
		p = p_;
		r = r_;
	}
	// 3 点を通る円 (まだ書いてない !!! )
	Circle(P a, P b, P c){
		;
	}
	// 円の面積
	double get_area(){
		return r * r * PI;
	}
	// 円周
	double circumference(){
		return 2.0 * r * PI;
	}
	// 点 a が円の内部にあるかどうか (未検証 ??? )
	bool is_inside(P a){
		return sq( p.X - a.X ) + sq( p.Y - a.Y ) <= r*r;
	}
	// 点 a が円周上にあるかどうか
	bool on_boundary(P a){
		return equal( sq( p.X - a.X ) + sq( p.Y - a.Y ) , r * r );
	}
	// 2 つの円の共通接線を返す (まだ書いてない !!!)
	// 2 つの円が離れている => 共通接線は 4 つ
	// 2 つの円が外接する   => 共通接線は 3 つ
	// 2 つの円が交わる     => 共通接線は 2 つ
	// 2 つの円が内接する    => 共通接線は 1 つ
	// 2 つの円のどちらかが内包する => 共通接線は 0 つ
	vector<Line> hoge_2(const Circle& cir){
		;
	}
	// 2 つの円の交わる点を返す (まだ書いてない !!!)
	// 2 つの円が離れている・内包する => 接点は 0 つ
	// 2 つの円が外接 or 内接する   => 接点は 1 つ
	// 2 つの円が交わる            => 接点は 2 つ
	vector<P> intersection(const Circle& cir){
		;
	}
	// 円と直線の交点を返す (まだ書いてない !!!)
	vector<P> intersection(const Line& l){
	}
	// 任意の弦の長さを返す (まだ書いてない !!!)
	
	// 円のパラメータの表示 (デバッグ用)
	void print(){
		cout << "circle : r = " << r << " p = (" << p.X << "," << p.Y << ")" << endl;
	}
};

// 三角形の表現
struct Triangle{
private:
	// 余弦定理から 3 つの角の角度を求める (内部の関数で使用)
    double LawOfCosines(double a, double b, double c){
        return acos( (b*b + c*c - a*a) / (2.0 * b * c) );
    }
    // ラジアンから度数へ変換して返す
    double to_degree(double radian){
    	return radian * 180.0 / PI;
    }
public:
	// 3 つの頂点
	P a, b, c;
    // 3 つの辺の長さ
    double edgeA, edgeB, edgeC;
    // 3 つの角の角度 (ラジアン)
    double angleA,angleB,angleC;
    
    // コンストラクタで初期化
    Triangle(P p1, P p2, P p3){
        a = p1;
        b = p2;
        c = p3;
        edgeB = abs(c-a);
        edgeA = abs(b-c);
        edgeC = abs(a-b);
        angleA = LawOfCosines( edgeA, edgeB, edgeC );
        angleB = LawOfCosines( edgeB, edgeC, edgeA );
        angleC = LawOfCosines( edgeC, edgeA, edgeB );
    }
    // 三角形の面積を返す (ヘロンの公式)
	double get_area(){
		double s = 0.5 * (edgeA + edgeB + edgeC);
		return sqrt( s * (s - edgeA) * (s - edgeB) * (s - edgeC) );
	}
	// 三角形の重心を返す
	P gravity(){
		P g( (a.X + b.X + c.X) / 3.0 , (a.Y + b.Y + c.Y) / 3.0 );
		return g;
	}
    // 三角形の外接円を返す
    Circle circumscribed_circle(){
		double r = ( edgeA / sin(angleA) / 2.0 );
		double A = sin( 2.0 * angleA );
		double B = sin( 2.0 * angleB );
		double C = sin( 2.0 * angleC );
		double cx = ( (a.X * A + b.X * B + c.X * C) / (A+B+C) );
		double cy = ( (a.Y * A + b.Y * B + c.Y * C) / (A+B+C) );
		Circle cir( P(cx,cy) , r );
		return cir;
	}
	// 三角形の内接円を返す (未検証 ???)
	Circle inscribed_circle(){
		// 三角形の外周の長さ
		double ABC = edgeA + edgeB + edgeC;
		
		double cx = (a.X * edgeA + b.X * edgeB + c.X * edgeC) / ABC;
		double cy = (a.Y * edgeA + b.Y * edgeB + c.Y * edgeC) / ABC;
		double r  = (2.0 * get_area()) / ABC ;
		Circle cir( P(cx,cy) , r );
		return cir;
	}
	// 点 p が三角形の内部にあるかどうか (まだ書いてない !!! AOJ 0012 にあります)
	bool is_inside(P p){
		;
	}
	// 点 p が三角形の辺上にあるかどうか (まだ書いてない !!!)
	bool on_boundary(P p){
		;
	}
	// 三角形のパラメータの表示 (デバッグ用)
	void print(){
		cout << "[triangle] : " << endl;
		cout << "a = (" << a.X << "," << a.Y << ") ";
		cout << "b = (" << b.X << "," << b.Y << ") ";
		cout << "c = (" << c.X << "," << c.Y << ") " << endl;
		cout << "AB = " << edgeC << " BC = " << edgeA << " CA = " << edgeB << endl;
		cout << "A = " << to_degree( angleA ) << " ";
		cout << "B = " << to_degree( angleB ) << " ";
		cout << "C = " << to_degree( angleC ) << endl;
	}
};

// 多角形の表現
struct Polygon{
	// 頂点の集まり
	vector<P> g;
	// コンストラクタで初期化
	Polygon(vector<P> vp){
		g = vp;
	}
	// 点 p が多角形の内部にあるかどうか (まだ書いてない !!!)
	bool is_inside(P p){
		;
	}
	// 点 p が多角形の辺上にあるかどうか
	bool on_boundary(P p){
	}
	// 直線 l と多角形の交点を返す (まだ書いてない !!!)
	vector<P> itersection(Line l){
		;
	}
	// 凸多角形かどうか (まだ書いてない !!!)
	bool is_convex(){
		;
	}
	// 多角形の面積を返す (まだ書いてない !!!)
	double get_area(){
		;
	}
};

// 2 点間の距離
double dis(P a, P b){
	return sqrt( sq( a.real()-b.real() ) + sq( a.imag()-b.imag() ) );
}

// ベクトルaの単位ベクトルを求める
P unit(P a){
	return a / abs(a);
}

// ベクトルaの法線ベクトルを求める
vector<P> normal(P a){
	vector<P> vp;
	vp.push_back( a * P(0,  1) );
	vp.push_back( a * P(0, -1) );
	return vp;
}

// ベクトル a の単位法線ベクトルを求める
vector<P> normal_unit(P a){
	vector<P> vp;
	vp.push_back( (a * P(0,  1)) / abs(a) );
	vp.push_back( (a * P(0, -1)) / abs(a) ) ;
	return vp;
}

// 内積 (dot product) : a・b = |a||b|cosΘ
double dot(P a, P b) {
	return (a.real() * b.real() + a.imag() * b.imag());
}

// 外積 (cross product) : a×b = |a||b|sinΘ
double cross(P a, P b) {
    return (a.real() * b.imag() - a.imag() * b.real());
}

// 2 直線の直交判定 : a⊥b <=> dot(a, b) = 0
int is_orthogonal(P a1, P a2, P b1, P b2) {
	return equal( dot(a1-a2, b1-b2), 0.0 );
}

// 2 直線の平行判定 : a//b <=> cross(a, b) = 0
int is_parallel(P a1, P a2, P b1, P b2) {
	return equal( cross(a1-a2, b1-b2), 0.0 );
}

// 点 c が直線 a, b 上にあるかどうか 
int is_point_on_line(P a, P b, P c) {
	return equal( cross(b-a, c-a), 0.0 );
}

// 下記は (1) より (2) のほうが簡潔で良い.

// 点 c が線分 a, b 上にあるかどうか (1)
int is_point_on_line_1(P a, P b, P c) {
  return equal( cross(b-a, c-a), 0.0 ) &&
         (dot(b-a, c-a) > -EPS) &&
         (dot(a-b, c-b) > -EPS);
}

// 点 c が線分 a, b 上にあるかないか(2)
int is_point_on_line_2(P a, P b, P c) {
	// |a-c| + |c-b| <= |a-b| なら線分上
	return (abs(a-c) + abs(c-b) < abs(a-b) + EPS);
}

// 点 a, bを通る直線と点 c との距離
double distance_l_p(P a, P b, P c) {
	return abs(cross(b-a, c-a)) / abs(b-a);
}

// 点 a, b を端点とする線分と点 c との距離
double distance_ls_p(P a, P b, P c) {
	if( dot(b-a, c-a) < EPS ) return abs(c-a);
	if( dot(a-b, c-b) < EPS ) return abs(c-b);
	return abs(cross(b-a, c-a)) / abs(b-a);
}

// a1, a2 を端点とする線分と b1, b2 を端点とする線分の交差判定
int is_intersected_ls(P a1, P a2, P b1, P b2) {
	return ( cross(a2-a1, b1-a1) * cross(a2-a1, b2-a1) < EPS ) &&
		   ( cross(b2-b1, a1-b1) * cross(b2-b1, a2-b1) < EPS );
}

// a1, a2 を端点とする線分と b1, b2 を端点とする線分の交点計算
P intersection_ls(P a1, P a2, P b1, P b2) {
	P b = b2-b1;
	double d1 = abs(cross(b, a1-b1));
	double d2 = abs(cross(b, a2-b1));
	double t = d1 / (d1 + d2);
	
	return a1 + (a2-a1) * t;
}

// a1, a2 を通る直線と b1, b2 を通る直線の交差判定
int is_intersected_l(P a1, P a2, P b1, P b2) {
	return !equal( cross(a1-a2, b1-b2), 0.0 );
}

// a1, a2 を通る直線と b1, b2 を通る直線の交点計算
P intersection_l(P a1, P a2, P b1, P b2) {
	P a = a2 - a1; P b = b2 - b1;
	return a1 + a * cross(b, b1-a1) / cross(b, a);
}

// 2 つの円の共通面積を求める (未検証 ???)
double cc_area(const Circle& c1, const Circle& c2) {
    double d = abs(c1.p - c2.p);
    if( c1.r + c2.r <= d + EPS ){
        return 0.0;
    }else if( d <= abs(c1.r - c2.r) + EPS ){
        double r = min( c1.r , c2.r ); // ここが怪しい ???
        return r * r * PI;
    }else{
        double rc = ( d * d + c1.r * c1.r - c2.r * c2.r) / ( 2.0 * d );
        double theta = acos( rc / c1.r );
        double phi = acos((d - rc) / c2.r);
        return c1.r * c1.r * theta + c2.r * c2.r * phi - d * c1.r * sin(theta);
    }
}

// 
void debug_p(P p){
	cout << "(" << p.X << "," << p.Y << ")" << endl;
}

int main(){
	int T;
	cin >> T;
	for(int t_ = 1 ; t_ <= T ; t_++ ){
		double x1,y1,x2,y2,x3,y3;
		cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
		P a(x1,y1);
		P b(x2,y2);
		P c(x3,y3);
		Triangle tri( a, b, c );
		Circle cir = tri.circumscribed_circle();
		printf("%.3f %.3f %.3f\n", cir.p.X , cir.p.Y, cir.r );
	}
}

Measured memory_bytes: 0