//Accepted 320 KB 47 ms
//dp
//dp[i][j]=1 表示用s1的前i个,s2的前j个字符能构成s3的前i+j-1个字符
//dp[i][j]=0 表示构不成
//dp[i][j]=1 if (dp[i-1][j]==1 && s1[i-1]==s3[i+j-1] || dp[i][j-1]==1 && s2[j-1]==s3[i+j-1])
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
;
char s1[imax_n];
char s2[imax_n];
];
int dp[imax_n][imax_n];
int n1,n2;
void Dp()
{
memset(dp,,sizeof(dp));
dp[][]=;
;i<=n1;i++)
{
;
;j<=i;j++)
]!=s3[j-])
flag=;
dp[i][]=flag;
}
;i<=n2;i++)
{
;
;j<=i;j++)
]!=s3[j-])
flag=;
dp[][i]=flag;
}
;i<=n1;i++)
{
;j<=n2;j++)
{
][j]== && s1[i-]==s3[i+j-]) dp[i][j]=;
]== && s2[j-]==s3[i+j-]) dp[i][j]=;
//printf("dp[%d][%d]=%d\n",i,j,dp[i][j]);
}
}
)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
int main()
{
int T;
scanf("%d",&T);
;t<=T;t++)
{
scanf("%s%s%s",s1,s2,s3);
n1=strlen(s1);
n2=strlen(s2);
printf("Data set %d: ",t);
Dp();
}
;
}