模拟即可
#include<iostream>
#include<cstring>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
map<char,int>p;
char a[111],b[111];
int an[16],bn[16];//单张
int ad[16],bd[16];//对子
int as[16],bs[16];//三张
int asd[16][16],bsd[16][16];//三带一
int asd2[16][16],bsd2[16][16];
int az[16],bz[16];//炸弹
int aw,bw;//王炸
int a411[16][16][16],b411[16][16][16];//4带1带1
int a42[16][16],b42[16][16];//4带2
int la,lb;
void init()
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(an,0,sizeof(an));
memset(bn,0,sizeof(bn));
memset(ad,0,sizeof(ad));
memset(bd,0,sizeof(bd));
memset(as,0,sizeof(as));
memset(bs,0,sizeof(bs));
memset(asd,0,sizeof(asd));
memset(bsd,0,sizeof(bsd));
memset(az,0,sizeof(az));
memset(bz,0,sizeof(bz));
memset(a411,0,sizeof(a411));
memset(b411,0,sizeof(b411));
memset(a42,0,sizeof(a42));
memset(b42,0,sizeof(b42));
memset(asd2,0,sizeof(asd2));
memset(bsd2,0,sizeof(bsd2));
aw=0;
bw=0;
}
bool p42()
{
for(int i=15;i>=1;i--)
{
for(int j=15;j>=1;j--)
{
if(a42[i][j])return true;
if(b42[i][j])return false;
}
}
return false;
}
bool p411()
{
for(int i=15;i>=1;i--)
{
for(int j=15;j>=1;j--)
{
for(int k=j-1;k>=1;k--)
{
if(a411[i][j][k])return true;
if(b411[i][j][k])return false;
}
}
}
}
bool p32()
{
for(int i=15;i>=1;i--)
{
for(int j=15;j>=1;j--)
{
if(asd2[i][j])return true;
if(bsd2[i][j])return false;
}
}
return false;
}
bool p31()
{
for(int i=15;i>=1;i--)
{
for(int j=15;j>=1;j--)
{
if(asd[i][j])return true;
if(bsd[i][j])return false;
}
}
return false;
}
bool p3()
{
for(int i=15;i>=1;i--)
{
if(as[i])return true;
if(bs[i])return false;
}
return false;
}
bool p2()
{
for(int i=15;i>=1;i--)
{
if(ad[i])return true;
if(bd[i])return false;
}
return false;
}
bool p1()
{
for(int i=15;i>=1;i--)
{
if(an[i])return true;
if(bn[i])return false;
}
return false;
}
bool solve()
{
//统计下
for(int i=1;i<=15;i++)
{
if(an[i]>=2)ad[i]=1;
if(an[i]>=3)
{
as[i]=1;
for(int j=1;j<=15;j++)
{
if(i==j)continue;
if(an[j])asd[i][j]=1;
if(an[j]>=2)asd2[i][j]=1;
}
}
if(an[i]>=4)
{
az[i]=1;
for(int j=1;j<=15;j++)
{
if(i==j)continue;
if(an[j]>=2)a42[i][j]=1;
if(an[j])
{
for(int k=1;k<=15;k++)
{
if(k==i||k==j)continue;
if(an[k])a411[i][j][k]=1;
}
}
}
}
if(an[14]&&an[15])aw=1;
if(bn[i]>=2)bd[i]=1;
if(bn[i]>=3)
{
bs[i]=1;
for(int j=1;j<=15;j++)
{
if(i==j)continue;
if(bn[j])bsd[i][j]=1;
if(bn[j]>=2)bsd2[i][j]=1;
}
}
if(bn[i]>=4)
{
bz[i]=1;
for(int j=1;j<=15;j++)
{
if(i==j)continue;
if(bn[j]>=2)b42[i][j]=1;
if(bn[j])
{
for(int k=1;k<=15;k++)
{
if(k==i||k==j)continue;
if(bn[k])b411[i][j][k]=1;
}
}
}
}
if(bn[15]&&bn[14])bw=1;
}
//判断刚好出完
for(int i=15;i>=1;i--)
{
for(int j=15;j>=1;j--)
{
if(a42[i][j]&&la==6)return true;
}
}
for(int i=15;i>=1;i--)
{
for(int j=15;j>=1;j--)
{
for(int k=j-1;k>=1;k--)
{
if(a411[i][j][k]&&la==6)return true;
}
}
}
for(int i=15;i>=1;i--)
{
for(int j=15;j>=1;j--)
{
if(asd2[i][j]&&la==5)return true;
}
}
for(int i=15;i>=1;i--)
{
for(int j=15;j>=1;j--)
{
if(asd[i][j]&&la==4)return true;
}
}
for(int i=15;i>=1;i--)
{
if(as[i]&&la==3)return true;
}
for(int i=15;i>=1;i--)
{
if(ad[i]&&la==2)return true;
}
for(int i=15;i>=1;i--)
{
if(an[i]&&la==1)return true;
}
//王炸的情况
if(bw)return false;
if(aw)return true;
//炸弹的情况
for(int i=15;i>=1;i--)
{
if(az[i])return true;
if(bz[i])return false;
}
//各种看大小
if(p42())return true;
if(p411())return true;
if(p32())return true;
if(p31())return true;
if(p3())return true;
if(p2())return true;
if(p1())return true;
return false;
}
int main()
{
//全变成数字好做
p['3']=1;
p['4']=2;
p['5']=3;
p['6']=4;
p['7']=5;
p['8']=6;
p['9']=7;
p['T']=8;
p['J']=9;
p['Q']=10;
p['K']=11;
p['A']=12;
p['2']=13;
p['X']=14;
p['Y']=15;
int t;
scanf("%d",&t);
while(t--)
{
init();
scanf("%s",a);
scanf("%s",b);
la=strlen(a);
for(int i=0;i<la;i++)an[p[a[i]]]++;
lb=strlen(b);
for(int i=0;i<lb;i++)bn[p[b[i]]]++;
if(solve())printf("Yes\n");
else printf("No\n");
}
return 0;
}