#1215. 构建缩写

构建缩写

题目描述

Beaver(海狸)得到了一个包含 nn 个单词的初始集合 SS。接着他执行了 mm 次如下操作:

  1. Beaver 从集合 SS 中选出由一个或多个单词组成的序列(同一个单词可以在序列中出现多次),并将这个序列的首字母拼接起来形成一个缩写
  2. 然后,Beaver 将这个新生成的缩写加入到集合 SS 中。在此后的操作中,这个缩写就可以像普通单词一样被使用了。

一个序列的缩写是由该序列中各个单词的首字母依次拼接而成的。例如,序列 birch OAK birch redwood 对应的缩写BOBR

现在,给定集合 SS 中的 nn 个初始普通单词,以及 Beaver 生成的 mm缩写。请你判断 Beaver 是否犯了错,即是否可能通过上述操作合法地生成给出的这 mm缩写。 请注意,给出的这 mm缩写不一定是按照 Beaver 生成它们的原始顺序给出的。

输入格式

第一行包含一个整数 tt1t5001 \le t \le 500)—— 测试用例的数量。

对于每个测试用例:

  • 第一行包含两个整数 nnmm1n,m1001 \le n, m \le 100)—— 分别表示普通单词的数量和缩写的数量。
  • 接下来 nn 行,每行包含一个字符串 wiw_i1wi201 \le |w_i| \le 20)—— 表示初始的普通单词。
  • 接下来 mm 行,每行包含一个字符串 aia_i1ai201 \le |a_i| \le 20)—— 表示 Beaver 生成的缩写

所有的普通单词 wiw_i 均由小写英文字母组成,所有的缩写 aia_i 均由大写英文字母组成。 在每个测试用例中,所有的 n+mn+m 个字符串 w1,,wn,a1,,amw_1, \dots, w_n, a_1, \dots, a_m 互不相同。

输出格式

对于每个测试用例,如果存在一种合法的生成顺序能够得到这 mm缩写,输出 YES;否则输出 NO

样例输入 1

4
6 4
apple
grand
banana
great
cherry
good
AG
BG
CG
ABC
1 1
apple
AA
1 2
apple
A
AA
2 2
apple
avocado
B
BA

样例输出 1

YES
YES
YES
NO

说明

样例解释

  • 在第一个测试用例中,合法的生成顺序可以是:AGBGCG,最后是 ABC
    • AG 可由 applegrand 生成。
    • BG 可由 bananagreat 生成。
    • CG 可由 cherrygood 生成。
    • ABC 可由刚刚生成的三个缩写 AGBGCG 生成(它们的首字母依次为 ABC)。
  • 在第二个测试用例中,可以通过选用两次 apple 直接生成缩写 AA
  • 在第三个测试用例中,可以先选用一次 apple 生成缩写 A;然后用 apple 加上刚生成的缩写 A 生成缩写 AA
  • 在第四个测试用例中,可以证明不存在任何一种合法的生成顺序。

数据范围

  • 对于所有测试点,保证 1t5001 \le t \le 500
  • 保证每个测试用例中,所有字符串的总长度之和不超过 5000050000
  • 保证所有的 nnmm 均为整数。