#include<cstdio>
#include<algorithm>
#define LL long long
using namespace std;
const LL P=2000000000000000LL;
LL ansx,ansy;
bool flag;
void Change(LL x,LL y)
{
if(flag||(abs(x)+abs(y)!=abs(ansx)+abs(ansy)?abs(x)+abs(y)<abs(ansx)+abs(ansy):x!=ansx?x>ansx:y>ansy))
ansx=x,ansy=y,flag=0;
}
int n;
LL x[1005],y[1005];
bool ch[1005];
LL vx[1005];
int dx,dy;
LL lx,rx,ly,ry;
void Find(LL x,LL y)
{
y=(x-y)/2;
x=x-y;
int cx=2-((x&1)^dx);
int cy=2-((y&1)^dy);
for(LL i=x-cx;i<=x+cx;i+=2)
for(LL j=y-cy;j<=y+cy;j+=2)
if(i+j<=rx&&i+j>=lx&&i-j<=ry&&i-j>=ly)
Change(i,j);
}
#define X(i) ((x[i]&1)^dx^ch[i])
#define Y(i) ((y[i]&1)^dy^ch[i])
void Calc()
{
ly=-P,ry=P;
for(int j=1;j<=n;j++)
if(X(j)!=Y(j))
{
if(X(j)^(x[j]+y[j]<rx))
ry=min(ry,x[j]-y[j]);
else
ly=max(ly,x[j]-y[j]);
if(ly>ry)
return ;
}
Find(0,0);
Find(lx,lx);Find(lx,-lx);Find(rx,rx);Find(rx,-rx);
Find(ly,ly);Find(-ly,ly);Find(ry,ry);Find(-ry,ry);
Find(lx,ly);Find(lx,ry);Find(rx,ly);Find(rx,ry);
}
void Work()
{
int N=0;
for(int i=1;i<=n;i++)
if(X(i)!=Y(i))
vx[++N]=x[i]+y[i];
sort(vx+1,vx+1+N);
N=unique(vx+1,vx+1+N)-vx-1;
lx=-P;
for(int i=1;i<=N;i++)
{
rx=vx[i];
Calc();
lx=rx;
}
rx=P;
Calc();
}
#undef X
#undef Y
char s[15];
int main()
{
freopen("square.in", "r", stdin);
freopen("square.out", "w", stdout);
int T;
scanf("%d",&T);
for(int testcase=1;testcase<=T;testcase++)
{
scanf("%d",&n);
static bool F[2][2];
F[0][0]=F[1][0]=F[0][1]=F[1][1]=flag=1;
for(int i=1;i<=n;i++)
{
scanf("%lld%lld%s",&x[i],&y[i],s);
ch[i]=s[0]=='.';
F[(x[i]&1)^ch[i]][(y[i]&1)^ch[i]]=0;
}
for(dx=0;dx<2;dx++)
for(dy=0;dy<2;dy++)
if(F[dx][dy])
Work();
printf("Case #%d: ",testcase);
if(flag)
puts("Too damaged");
else
printf("%lld %lld\n",ansx,ansy);
}
}
比赛已结束。