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$ | 无 |