#include <bits/stdc++.h>
using namespace std;
#define pb push_back
typedef long long LL;
int n;
double x[11000], y[11000];
double w[11000];
double sx,sy;
double tx,ty;
void solve(int test){
cout << "Case #" << test + 1 << ": " ;
cin >> n;
vector<pair<double, double> > vtx,vty;
double S=0;
for(int i=0; i<n; i++){
cin >> tx >> ty >> w[i];
//Transform
x[i] = (tx+ty);
y[i] = (ty-tx);
vtx.pb( {x[i] , w[i] } );
vty.pb( {y[i], w[i] } );
S += w[i];
}
//Find median
sort(vtx.begin(), vtx.end());
sort(vty.begin(), vty.end());
int k = 0;
double sum = S - vtx[0].second;
while(sum > S/2){
++k;
sum -= vtx[k].second;;
}
double rx = vtx[k].first;
if(sum == S/2){
rx = (rx + vtx[k+1].first)/2;
}
k = 0;
sum = S - vty[0].second;
while(sum > S/2){
++k;
sum -= vty[k].second;;
}
double ry = vty[k].first;;
if(sum == S/2){
ry = (ry + vty[k+1].first)/2;
}
double res = 0;
for(int i=0; i<n; i++){
res += (abs(rx-x[i]) + abs(ry-y[i]) )*w[i];
}
cout << setprecision(7) << fixed << res/2 << endl;
}
int ntest;
int main(){
cin >> ntest;
for(int test=0; test<ntest; test++){
solve(test);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIHBiIHB1c2hfYmFjawp0eXBlZGVmIGxvbmcgbG9uZyBMTDsKCmludCBuOwpkb3VibGUgeFsxMTAwMF0sIHlbMTEwMDBdOwpkb3VibGUgd1sxMTAwMF07CmRvdWJsZSBzeCxzeTsKZG91YmxlIHR4LHR5OwoKdm9pZCBzb2x2ZShpbnQgdGVzdCl7Cgljb3V0IDw8ICJDYXNlICMiIDw8IHRlc3QgKyAxIDw8ICI6ICIgOwoJY2luID4+IG47CgkJCgl2ZWN0b3I8cGFpcjxkb3VibGUsIGRvdWJsZT4gPiB2dHgsdnR5OwoJZG91YmxlIFM9MDsKCWZvcihpbnQgaT0wOyBpPG47IGkrKyl7CgkJY2luID4+IHR4ID4+IHR5ID4+IHdbaV07CgkJLy9UcmFuc2Zvcm0KCQl4W2ldID0gKHR4K3R5KTsKCQl5W2ldID0gKHR5LXR4KTsJCQoJCXZ0eC5wYigge3hbaV0gLCB3W2ldIH0gKTsKCQl2dHkucGIoIHt5W2ldLCB3W2ldIH0gKTsKCQlTICs9IHdbaV07Cgl9CgkKCS8vRmluZCBtZWRpYW4KCXNvcnQodnR4LmJlZ2luKCksIHZ0eC5lbmQoKSk7Cglzb3J0KHZ0eS5iZWdpbigpLCB2dHkuZW5kKCkpOwoJCQogIAlpbnQgayA9IDA7CiAgCWRvdWJsZSBzdW0gPSBTIC0gdnR4WzBdLnNlY29uZDsgCgogIAl3aGlsZShzdW0gPiBTLzIpewogICAgCSsrazsKICAgIAlzdW0gLT0gdnR4W2tdLnNlY29uZDs7CiAgCX0JCiAgCQoJZG91YmxlIHJ4ID0gdnR4W2tdLmZpcnN0OwoJaWYoc3VtID09IFMvMil7CgkJcnggPSAocnggKyB2dHhbaysxXS5maXJzdCkvMjsKCX0KCQoJayA9IDA7CiAgCXN1bSA9IFMgLSB2dHlbMF0uc2Vjb25kOyAKCiAgCXdoaWxlKHN1bSA+IFMvMil7CiAgICAJKytrOwogICAgCXN1bSAtPSB2dHlba10uc2Vjb25kOzsKICAJfQkKCWRvdWJsZSByeSA9IHZ0eVtrXS5maXJzdDs7CglpZihzdW0gPT0gUy8yKXsJCgkJcnkgPSAocnkgKyB2dHlbaysxXS5maXJzdCkvMjsKCX0KCWRvdWJsZSByZXMgPSAwOwoJZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKCQlyZXMgKz0gKGFicyhyeC14W2ldKSArIGFicyhyeS15W2ldKSApKndbaV07Cgl9CgkKCWNvdXQgPDwgc2V0cHJlY2lzaW9uKDcpIDw8IGZpeGVkIDw8IHJlcy8yIDw8IGVuZGw7Cn0KCmludCBudGVzdDsKaW50IG1haW4oKXsKCWNpbiA+PiBudGVzdDsKCWZvcihpbnQgdGVzdD0wOyB0ZXN0PG50ZXN0OyB0ZXN0KyspewoJCXNvbHZlKHRlc3QpOwoJfQoJcmV0dXJuIDA7Cn0=