//////////////////////////////////////////////////////////////////////////////
//2353416 2010-11-19 01:19:11 Accepted 1184 C 0 160 VRS
//1184 硬币称重 贪心
//even就肯定是正常的,凡是出现up或down,问题硬币肯定在几次都轻,或都重的地方
//所以它在该情况肯定出现次数最多,创建一个coins数组,记录轻重次数,up的就+1,down就-1,
//绝对值最大的就是问题硬币
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int coins[15];
char lr_Side[2][3][15];
void ChangeCoins(int loc,int staMark)
{
if(staMark==0)
coins[loc]=10000;
else if(staMark==1 && coins[loc]!=10000)
coins[loc]++;
else if(staMark==2 && coins[loc]!=10000)
coins[loc]--;
}
void ProcessCoins(int lr,int level,int sta)
{
int i;
int loc;
for(i=0;i<(int)strlen(lr_Side[lr][level]);i++)
{
loc=lr_Side[lr][level][i]-'A';
if(sta==0)
ChangeCoins(loc,sta);
else if(sta==lr+1) //这里是利用刚好的关系,简化代码
ChangeCoins(loc,2);
else
ChangeCoins(loc,1);
}
return;
}
int main()
{
char status[3][5];
int testcase;
int i;
int staMark;
int min,max;
int minLoc,maxLoc;
scanf("%d",&testcase);
while(testcase--)
{
memset(coins,0,sizeof(coins));
for(i=0;i<3;i++)
scanf("%s %s %s",&lr_Side[0][i],&lr_Side[1][i],&status[i]);
for(i=0;i<3;i++)
{
if(strcmp(status[i],"even\0")==0)
staMark=0;
else if(strcmp(status[i],"up\0")==0)
staMark=1;
else
staMark=2;
ProcessCoins(0,i,staMark);
ProcessCoins(1,i,staMark);
}
min=0;max=0;
for(i=0;i<12;i++)
{
if(coins[i]==10000)
continue;
else if(coins[i]<min)
{
min=coins[i];
minLoc=i;
}
else if(coins[i]>max)
{
max=coins[i];
maxLoc=i;
}
else if(coins[i]==min)
minLoc=-1;
else if(coins[i]==max)
maxLoc=-1;
}
if(minLoc!=-1)
printf("%c is the counterfeit coin and it is heavy.\n",'A'+minLoc);
else
printf("%c is the counterfeit coin and it is light.\n",'A'+maxLoc);
}
return 0;
}