Go: package main

import (
	"fmt"
	"math"
)

func main() {
	n := scanInt()
	for i := 0; i < n; i++ {
		circleTriangle()
	}
}

func scanInt() int {
	var n int
	fmt.Scanf("%d", &n)
	return n
}

func circleTriangle() {
	var x1, y1, x2, y2, x3, y3 float64
	fmt.Scanf("%f%f%f%f%f%f", &x1, &y1, &x2, &y2, &x3, &y3)
	a := 2 * (x1 - x2)
	b := 2 * (y1 - y2)
	c := 2 * (x1 - x3)
	d := 2 * (y1 - y3)
	e := x1*x1 - x2*x2 + y1*y1 - y2*y2
	f := x1*x1 - x3*x3 + y1*y1 - y3*y3

	px := (d*e - b*f) / (a*d - b*c)
	py := (a*f - c*e) / (a*d - b*c)

	r := math.Sqrt((x1-px)*(x1-px) + (y1-py)*(y1-py))
	fmt.Printf("%.3f %.3f %.3f\n", px, py, r)
}

C++: #include <algorithm>
#include <functional>
#include <cmath>
#include <cstdio>
#include <cstdint>
#include <cstdlib>
#include <cstring>
#include <string>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <vector>
#include <list>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <bitset>
#include <climits>
#include <complex>
  
#define all(c) (c).begin(), (c).end()
#define rep(i,n) for(int i=0;i<(n);i++)
#define pb(e) push_back(e)
#define mp(a, b) make_pair(a, b)
#define fr first
#define sc second
  
const int INF=100000000;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
using namespace std;
typedef complex<double> P;
int n;
  
double cross(P p1,P p2) {
    return (real(p1)*imag(p2) - imag(p1)*real(p2));
}
double calc_S(P p1,P p2,P p3) {
    double ret = 0.0;
    p1 -= p3;
    p2 -= p3;
  
    ret = cross(p1,p2)/2.0;
      
    return abs(ret);
}
  
int main() {
    cin>>n;
    while(n-->0) {
        double x1_,y1_;
        double x2_,y2_;
        double x3_,y3_;
        cin>>x1_>>y1_>>x2_>>y2_>>x3_>>y3_;
        P p1(x1_,y1_);
        P p2(x2_,y2_);
        P p3(x3_,y3_);
        P A = p1-p2;
        P B = p2-p3;
        P C = p1-p3;
        double S = calc_S(p1,p2,p3);
        double R = abs(A)*abs(B)*abs(C)/S;
        R /= 4.0;
          
        P A1 = 2.0*(p2-p1);
        P B1 = 2.0*(p3-p1);
        P C1 = P(norm(p1)-norm(p2),norm(p1)-norm(p3));
        double X = cross(P(imag(A1),imag(B1)),C1)/cross(A1,B1);
        double Y = cross(C1,P(real(A1),real(B1)))/cross(A1,B1);
        printf("%.3lf %.3lf %.3lf\n",X,Y,R);
  
    }
    return 0;
}

C++: #include<iostream>
#include<iomanip>
#include<cmath>

int main() {
	int n;
	std::cin >> n;
	double rax, ray, rbx, rby, rcx, rcy;
	for (int i = 0; i < n; i++) {
		double ax, ay, bx, by, cx, cy, aa, bb, cc, a, b, c, d, e, f, rx, ry, rr;
		std::cin >> rax >> ray >> rbx >> rby >> rcx >> rcy;
		ax = rbx - rax; ay = rby - ray;
		bx = rcx - rbx; by = rcy - rby;
		cx = rax - rcx; cy = ray - rcy;
		aa = ax * ax + ay * ay;
		bb = bx * bx + by * by;
		cc = cx * cx + cy * cy;
		a = std::sqrt(aa);
		b = std::sqrt(bb);
		c = std::sqrt(cc);
		d = aa * (bb + cc - aa);
		e = bb * (cc + aa - bb);
		f = cc * (aa + bb - cc);
		rx = ((d * rcx) + (e * rax) + (f * rbx)) / (d + e + f);
		ry = ((d * rcy) + (e * ray) + (f * rby)) / (d + e + f);
		rr = (a * b * c) / std::sqrt((a + b + c)*(-a + b + c)*(a - b + c)*(a + b - c));
		std::cout << std::fixed;
		std::cout << std::setprecision(3) << rx << " " << ry << " " << rr << std::endl;
	}

	return 0;
}

C++: #include <cstdio>
#include <cmath>

int n;
double x[3],y[3];
struct data{
	double a,b,c;
	data(double aa,double bb,double cc){
		a=aa;
		b=bb;
		c=cc;
	}
};

struct data2{
	double x,y,r;
	data2(){

	}
	data2(double xx,double yy,double rr){
		x=xx;
		y=yy;
		r=rr;
	}
};

data make_line(int i,int j){
	if(x[i]==x[j]){
		return data(0.0,(y[i]+y[j])/2.0,1);
	}
	if(y[i]==y[j]){
		return data((x[i]+x[j])/2,0,0); 
	}
	double aa=(y[i]-y[j])/(x[i]-x[j]);
	aa=-1.0/aa;
	double bb=(y[i]+y[j])/2.0-(x[j]+x[i])/2.0*aa;
	return data(aa,bb,1);
}

data2 cross(data y1,data y2){
	data2 d;
	if(y1.c==0){
		d.x=y1.a;
		d.y=y2.a*d.x+y2.b;
	}
	if(y2.c==0){
		d.x=y2.a;
		d.y=y1.a*d.x+y1.b;
	}
	if(y1.c==1 && y2.c==1){
		d.x=(y1.b-y2.b)/(y1.a-y2.a);
		d.y=y1.a*d.x+y1.b;
	}
	d.r=sqrt(pow(d.x-x[0],2)+pow(d.y-y[0],2));
	return d; 
}

int main(void){
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		for(int j=0;j<3;j++){
			scanf("%lf %lf",&x[j],&y[j]);
		}
		data y1=make_line(0,1);
		data y2=make_line(0,2);
		data2 y3=cross(y1,y2);
		printf("%.3f %.3f %.3f\n",y3.x,y3.y,y3.r);
	}
	return 0;
}

C++: #include <stdio.h>
#include <math.h>
double mx(double a, double b, double c) {if (a>=b && a>=c) return a; else if (b>=a && b>=c) return b; else return c;}
int main() {int N;while (scanf("%d",&N)!=EOF) {if (!N) return 0;while (N--) {double x1,y1,x2,y2,x3,y3,x,y;scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);x=mx(fabs(x1-x2),fabs(x1-x3),fabs(x2-x3))/2.00;y=mx(fabs(y1-y2),fabs(y1-y3),fabs(y2-y3))/2.00;printf("%.3lf %.3lf %.3lf\n",x,y,sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)));}}}

C++: #include <bits/stdc++.h>
using namespace std;
//define
#define int long long
#define UNIQUE(v) v.erase(unique(all(v)), v.end());
#define ZIP(v) sort(all(v)),UNIQUE(v)
#define ADD(a, b) a = (a + b) % mod
#define SUB(a, b) a = (a+mod-b)%mod
#define MUL(a, b) a = (a * b) % mod
#define repi(i,m,n) for(int i = m;i < n;i++)
#define drep(i,n,m) for(int i = n;i >= m;i--)
#define rep(i,n) repi(i,0,n)
#define rrep(i,n) repi(i,1,n+1)
#define chmin(x,y) x = min(x,y)
#define chmax(x,y) x = max(x,y)
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(), v.rend()
#define dmp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define pf(x) push_front(x)
#define fi first
#define se second
// 許容する誤差ε
#define EPS (1e-10)
// 2つのスカラーが等しいかどうか
#define EQ(a,b) (abs((a)-(b)) < EPS)
// 2つのベクトルが等しいかどうか
#define EQV(a,b) ( EQ((a).real(), (b).real()) && EQ((a).imag(), (b).imag()) )
//template
template <typename T, typename U>
ostream &operator<<(ostream &os, const pair<T, U> &p){
  os << "(" << p.first << "," << p.second << ")";return os;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v){
  for (auto it = v.begin();it != v.end();++it){
    if(it != v.begin())os << " ";os << *it;
      }return os;
}
template <typename T, typename U>
ostream &operator<<(ostream &os, const map<T, U> &mp){
  for(auto x: mp)os << "(" << x.first << "," << x.second << ")" << endl;
  return os;
}
template<typename T, int SIZE>
int array_length(const T (&)[SIZE]){return SIZE;}
template<typename T, int N>
void PRINTF(const T (&a)[N], int s = N, int t = -1, bool f = true){
	if(t == -1){rep(i,s){if(i)cout << " ";cout << a[i];}}
	else repi(i,s,t){if(i!=s)cout << " ";cout << a[i];}
	if(f)cout << "\n";
}
template<typename T, int N1, int N2>
void PRINTF(const T (&a)[N1][N2], int h = N1, int w = N2){
	rep(i,h){rep(j,w){cout << a[i][j] << " \n"[j==w-1];}}
}
//typedef
typedef complex<double> Point;
typedef pair<int,int> P;
typedef pair<int, P> PP;
typedef pair<P, int> Pi;
typedef vector<int> vi;
typedef deque<int> dq;
const int inf = 1e9+7;
const int INF = 1e18+7;


double dot(Point a, Point b) {
  return (a.real() * b.real() + a.imag() * b.imag());
}
double cross(Point a, Point b) {
  return (a.real() * b.imag() - a.imag() * b.real());
}

Point mid(Point a, Point b){
  double x = (a.real()+b.real())/2.0;
  double y = (a.imag()+b.imag())/2.0;
  // cout << a << " " << b << endl;
  return Point(x, y);
}

Point intersection_l(Point a1, Point a2, Point b1, Point b2) {
  Point a = a2 - a1; Point b = b2 - b1;
  return a1 + a * cross(b, b1-a1) / cross(b, a);
}


signed main(){
  int n;
  scanf("%lld", &n);
  rep(i,n){
    vector<Point> vec(3);
    rep(j,3){
      double x, y;
      scanf("%lf%lf", &x, &y);
      vec[j] = Point(x, y);
    }
    
    Point v1 = (vec[1]-vec[0])*Point(0, 1);
    Point v2 = (vec[2]-vec[1])*Point(0, 1);
    Point mid1 = mid(vec[0], vec[1]);
    Point mid2 = mid(vec[1], vec[2]);
    Point p1 = mid1+v1;
    Point p2 = mid2+v2;
    Point p = intersection_l(mid1, p1, mid2, p2);
    printf("%.3lf %.3lf %.3lf\n", p.real(), p.imag(), abs(p-vec[0]));
  }
	return 0;
}