T823222 词语轮播(wordplay)

题目描述

校园广播站准备了一个词语列表,里面有 $K$ 个互不相同的英文词。每个词都只包含小写英文字母。最初,每个词被播报的次数都是 $0$。 接下来有 $N$ 次播报请求,每次请求给出一个小写英文字母。广播站需要从列表中选择一个以这个字母开头的词,按照下面的规则播报: 1. 在所有符合首字母要求的词中,选择此前被播报次数最少的词。 2. 如果有多个词并列,则选择其中字典序最小的词。 选中的词被播报后,它的播报次数增加 $1$。保证每次请求都至少有一个符合首字母要求的词。 两个词的字典序按从左到右第一个不同字母比较,字母在英文字母表中更靠前的词更小;如果一个词是另一个词的前缀,则较短的词更小。例如,`a`、`aaa`、`ab` 的字典序依次增大。 请按请求的先后顺序,输出每次播报的词。 本题有多组测试数据,不同组之间的播报次数互不影响。

输入格式

第一行包含一个整数 $T$,表示测试数据组数。 对于每组测试数据: - 第一行包含两个整数 $K,N$。 - 接下来 $K$ 行,每行包含一个词,表示词语列表。 - 接下来 $N$ 行,每行包含一个小写英文字母,表示一次请求。

输出格式

对于每组测试数据,输出 $N$ 行,每行一个词,依次表示各次请求播报的词。不同组之间不需要额外的空行。

说明/提示

### 样例解释 第一次请求为 `z`,`zadar` 和 `zagreb` 都未播报过,选择字典序更小的 `zadar`。 第二次请求为 `s`,选择尚未播报过且字典序更小的 `sisak`。第三次仍请求 `s`,此时 `split` 的播报次数为 $0$,选择 `split`。 第四次请求为 `z`,尚未播报过的 `zagreb` 被选中。第五次请求仍为 `z`,两个候选词都已经播报过一次,选择字典序更小的 `zadar`。 ## 样例 2 见 `考生目录/wordplay/wordplay2.in` 与 `考生目录/wordplay/wordplay2.ans`。该样例满足测试点 $1\sim12$ 的约束。 ## 样例 3 见 `考生目录/wordplay/wordplay3.in` 与 `考生目录/wordplay/wordplay3.ans`。该样例满足测试点 $13\sim20$ 的约束。 ## 样例 4 见 `考生目录/wordplay/wordplay4.in` 与 `考生目录/wordplay/wordplay4.ans`。该样例满足测试点 $13\sim20$ 的约束。 ## 样例 5 见 `考生目录/wordplay/wordplay5.in` 与 `考生目录/wordplay/wordplay5.ans`。该样例满足测试点 $13\sim20$ 的约束。 ## 数据范围 对于所有数据,保证: - $1\le T\le10$; - 每组数据中,$1\le K,N\le10^5$;每个词的长度为 $1\sim21$,仅包含小写英文字母,且 $K$ 个词互不相同; - 每个请求都是一个小写英文字母,并且列表中至少有一个词以该字母开头; - 同一输入文件中,所有组的 $K$ 之和、$N$ 之和分别不超过 $2\times10^5$。 | 测试点编号 | 附加限制(每组均满足) | | ---------- | ---------------------- | | $1\sim12$ | $K,N\le499$ | | $13\sim20$ | 无 |