/*
我去! 挑战编程上的神题! 写了500行 调试了3小时艰难AC!
*/
#include<cstdio>
#include<cstring>#include<algorithm>
using namespace std;
struct S
{
char v1,s;
int v;
} a[6],b[6];
int cmp(S x,S y)
{
return x.v>y.v;
}
int change(S *p)
{
for(int i = 0; i < 5; i++)
if(p[i].v1<='9')
p[i].v =p[i].v1-'0';
else if(p[i].v1 == 'T')
p[i].v = 10;
else if(p[i].v1=='J')
p[i].v = 11;
else if(p[i].v1=='Q')
p[i].v = 12;
else if(p[i].v1=='K')
p[i].v = 13;
else if(p[i].v1=='A')
p[i].v = 14;
}
int High_card()
{
sort(a,a+5,cmp);
sort(b,b+5,cmp);
for(int i = 0; i < 5; i++)
{
if(a[i].v>b[i].v)
return 1;//black
else if(b[i].v>a[i].v)
return 2;//WHILE
}
return 0;
}
int judge_one(S *p)
{
int x=0;
int f1 = 0;
for(int i = 0; i < 5; i++)
{
if(!f1)
for(int j = 0; j < 5; j++)
if(i!=j)
{
if(p[i].v==p[j].v)
{
f1++;
}
}
if(f1==1)
{
x = p[i].v;
break;
}
else f1 = 0;
}
return x;
}
int Pair_2()
{
int f1 = 0,ok1=0,ok2=0;
ok1 = judge_one(a);
ok2 = judge_one(b);
if(ok1>ok2)
return 1;
else if(ok1<ok2)
return 2;
return 0;
}
int judge_two(S *p,int *xp)
{
int f1=0,c1=0;
int ok1=0;
for(int i = 0; i < 5; i++)
{
if(!f1)
for(int j = i+1; j < 5; j++)
if(p[i].v==p[j].v)
{
f1++;
}
if(f1==1)
{
xp[c1] = p[i].v;
c1++;
}
f1 = 0;
if(c1==2)
{
ok1 = 1;
break;
}
}
//printf("%d---\n",ok1);
if(!ok1) return 0;
return 1;
}
int two_pairs()
{
int x[3],y[3],ok1,ok2;
ok1 = judge_two(a,x);
ok2 = judge_two(b,y);
if(ok1&&ok2)
{//printf("%d %d...\n",ok1,ok2);
if(x[0]<x[1])
{
int temp = x[1];
x[1] = x[0];
x[0] = temp;
}
if(y[0]<y[1])
{
int temp = y[1];
y[1] = y[0];
y[0] = temp;
}
for(int i = 0; i < 2; i++)
{
if(x[i]>y[i])
return 1;//black
else if(y[i]>x[i])
return 2;//WHILE
}
int p1=0,q1=0;
for(int i = 0; i < 5; i++)
if((a[i].v!=x[0])&&(a[i].v!=x[1]))
{
p1 = a[i].v;//printf("%d %d %d...\n",p1,x[0],x[1]);
}
for(int i = 0; i < 5; i++)
if((b[i].v!=y[0])&&(b[i].v!=y[1]))
{
q1 = b[i].v;//printf("%d %d %d...\n",q1,y[0],y[1]);
}
//printf("%d %d..\n",p1,q1);
if(p1>q1) return 1;
else if(p1<q1) return 2;
return 3;
}
if(ok1&&!ok2) return 1;
if(!ok1&&ok2) return 2;
if(!ok1&&!ok2) return 0;
}
int judge_three(S *p)
{
int f1 = 0;
int x=0;
for(int i = 0; i < 5; i++)
{
if(!f1)
for(int j = 0; j < 5; j++)
if(i!=j)
{
if(p[i].v==p[j].v)
f1++;
}
if(f1==2)
{
x = p[i].v;
break;
}
f1=0;
}
return x;
}
int three()
{
int f1 = 0,ok1=0,ok2=0;
ok1 = judge_three(a);
ok2 = judge_three(b);
//printf("%d %d..\n",ok1,ok2);
if(ok1>ok2)
return 1;
else if(ok1<ok2)
return 2;
else
{
if(!ok1)
return 0;
else return 3;
}
}
int judge_straight(S *p)
{
int ok1 = 1;
for(int i = 0; i < 4; i++)
{
if((p[i].v - p[i+1].v)!=1)
{
ok1 = 0;
break;
}
}
return ok1;
}
int Straight()
{
int ok1,ok2;
ok1 = judge_straight(a);
ok2 = judge_straight(b);
if(ok1&&ok2)
{
if(a[0].v > b[0].v) return 1; //black
else if(a[0].v < b[0].v) return 2;
else return 3;
}
else if(ok1&&!ok2) return 1;
else if(!ok1&&ok2) return 2;
else
{
return 0;
}
}
int judge_Flush(S *p)
{
int ok1=1;
for(int i = 1; i < 5; i++)
if(p[i].s!=p[0].s)
{
ok1 = 0;
break;
}
return ok1;
}
int Flush()
{
int ok1 = judge_Flush(a);
int ok2 = judge_Flush(b);
if(ok1&&ok2)
{
int ok = High_card();
if(!ok) return 3;
return ok;
}
else if(ok1&&!ok2) return 1;
else if(!ok1&&ok2) return 2;
else return 0;
}
int Full_House()
{
int ok1,ok2;
ok1 = judge_three(a);
ok2 = judge_three(b);
int pk1,pk2;
pk1 = judge_one(a);
pk2 = judge_one(b);
//printf("%d %d %d %d..\n",ok1,ok2,pk1,pk2);
int f1=0,f2=0;
if(ok1&&pk1)
f1 = 1;
if(ok2&&pk2)
f2 = 1;
if(f1&&f2)
{
if(ok1>ok2) return 1;
else if(ok1<ok2) return 2;
else
{
if(!ok1)
return 0;
else return 3;
}
}
if(f1&&!f2)
return 1;
if(!f1&&f2)
return 2;
return 0;
}
int judge_four(S *p)
{
int f1 = 0;
int x=0;
for(int i = 0; i < 5; i++)
{
if(!f1)
for(int j = 0; j < 5; j++)
if(i!=j)
{
if(p[i].v==p[j].v)
f1++;
}
if(f1==3)
{
x = p[i].v;
break;
}
}
return x;
}
int Four_pair()
{
int ok1 = judge_four(a);
int ok2 = judge_four(b);
//printf("%d %d..\n",ok1,ok2);
if(ok1>ok2)
return 1;
else if(ok1<ok2)
return 2;
else
{
if(!ok1)
return 0;
else return 3;
}
}
int Straight_Flush()
{
int ok1 = judge_Flush(a);
int ok2 = judge_Flush(b);
int pk1 = judge_straight(a);
int pk2 = judge_straight(b);
int f1=0,f2=0;
if(ok1&&pk1)
f1 = 1;
if(ok2&&pk2)
f2 = 1;
if(f1&&f2)
{
if(a[0].v>b[0].v)
return 1;
else if(a[0].v<b[0].v)
return 2;
else return 3;
}
else if(f1&&!f2)
return 1;
else if(!f1&&f2)
return 2;
else return 0;
}
int print(int ok)
{
if(ok==1)
{
puts("Black wins.");
return 0;
}
else if(ok==2)
{
puts("White wins.");
return 0;
}
}
int solve()
{
int ok = Straight_Flush();
if(ok)
{
if(ok==3)
{
printf("Tie.\n");
return 0;
}
print(ok);
return 0;
}
else
{
ok = Four_pair();
if(ok)
{
if(ok==3)
{
printf("Tie.\n");
return 0;
}
print(ok);
return 0;
}
else
{
ok = Full_House();
if(ok)
{
if(ok==3)
{
printf("Tie.\n");
return 0;
}
print(ok);
return 0;
}
else
{
ok = Flush();
if(ok)
{
if(ok==3)
{
printf("Tie.\n");
return 0;
}
print(ok);
return 0;
}
else
{
ok = Straight();
if(ok)
{
if(ok==3)
{
printf("Tie.\n");
return 0;
}
print(ok);
return 0;
}
else
{
ok = three();
if(ok)
{
if(ok==3)
{
printf("Tie.\n");
return 0;
}
print(ok);
return 0;
}
else
{
ok = two_pairs();
//printf("%d...\n",ok);
if(ok)
{
if(ok==3)
{
printf("Tie.\n");
return 0;
}
print(ok);
return 0;
}
else
{
ok = Pair_2();//printf("%d...\n",ok);
if(ok)
{
print(ok);
return 0;
}
else
{
ok = High_card();
if(ok)
{
print(ok);
return 0;
}
else
{
puts("Tie.");
}
}
}
}
}
}
}
}
}
}
int main()
{
char t1[10];
//freopen("a.txt","w",stdout);
while(scanf("%s",t1)!=EOF)
{
a[0].s = t1[1];
a[0].v1 = t1[0];
for(int i = 1; i < 5; i++)
{
scanf("%s",t1);
a[i].v1 = t1[0];
a[i].s = t1[1];
}
for(int i = 0; i < 5; i++)
{
scanf("%s",t1);
b[i].v1 = t1[0];
b[i].s = t1[1];
}
change(a);
change(b);
sort(a,a+5,cmp);
sort(b,b+5,cmp);
solve();
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
}
return 0;
}