#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
struct data
{
float x;
float y;
float m;
} typedef data;
vector <data> M; //<=> M[];
float BS_y (float front, float back)
{
float mid=(front+back)/2;
float SUM=0.0;
for (int i=0; i<M.size(); i++)
{
float x=M[i].x;
float m=M[i].m;
SUM+=(m*(mid-x));
}
long long tg = (long long)(SUM*100);
if (tg==0) return mid;
else if (tg>0) return BS_y (front, mid);
else return BS_y (mid, back);
}
float BS_x (float front, float back)
{
float mid=(front+back)/2;
float SUM=0.0;
for (int i=0; i<M.size(); i++)
{
float y=M[i].y;
float m=M[i].m;
SUM+=(m*(mid-y));
}
long long tg = (long long)(SUM*100);
if (tg==0) return mid;
else if (tg>0) return BS_x (front, mid);
else return BS_x (mid, back);
}
int main ()
{
int n;
int t=0;
while (1)
{
cin>>n;
if (n<0) break;
t++;
data tg;
float xMax=0, xMin=0;
float yMax=0, yMin=0;
for (int i=1; i<=n; i++)
{
cin>>tg.x>>tg.y>>tg.m;
M.push_back(tg); //Them mang;
if (i==1)
{
xMax=tg.x; xMin=tg.x;
yMax=tg.y; yMin=tg.y;
}
else
{
if (tg.x > xMax) xMax=tg.x;
if (tg.x < xMin) xMin=tg.x;
if (tg.y > yMax) yMax=tg.y;
if (tg.y < yMin) yMin=tg.y;
}
}
printf ("Case %d: %.2f %.2f\n",t, BS_y (xMin, xMax), BS_x (yMin, yMax));
M.clear(); //Xoa mang;
}
return 0;
}