这是一个交互式问题。
Lewis 是新编程语言 DiverC 的开发者之一。该语言编写的程序的主要特点是代码由两两不同的单词组成。Lewis 开发的 DiverC 编译器本身也是用 DiverC 编写的,由 $N$ 个两两不同的单词组成。
Lewis 正在使用 DiverC 在线自动补全服务。但 Lewis 犯了一个严重的错误:他忘记关闭“使用我的数据改进服务数据库”功能。Lewis 是第一个注册该服务的用户,因此现在该服务仅包含他编译器中的单词。
黑客 Fernando 想知道 Lewis 在编译器中使用的所有单词。于是他在 DiverC 在线自动补全服务上注册(明智地关闭了危险功能),现在,对于 Fernando 输入的每个前缀 $S$ 和整数 $K$,服务会按字典序返回 Lewis 代码中以 $S$ 为前缀的前 $K$ 个单词。如果只有 $k < K$ 个单词,服务仅给出 $k$ 个单词(但即使在这种情况下,服务使用计数器也会增加 $K$)。
Fernando 查看了用于在线服务的脚本,发现一个用户的 $K$ 值总和被限制为 $3\,800$。他希望通过若干次查询确定 Lewis 使用的所有 $N$ 个单词,使得这些查询中 $K$ 的总和不超过 $3\,800$。
你能帮帮他吗?
交互
首先,你的程序应读取一个整数 $T$ —— 需要处理的测试用例数量 ($1 \le T \le 5$)。
在每个测试用例开始时,评测程序会给出一个整数 $N$ —— Lewis 的 DiverC 编译器中的单词数量 ($1 \le N \le 1\,000$)。
你的程序可以进行两种类型的请求:
query S K—— 获取以 $S$ 为前缀的字典序最小的 $K$ 个单词 ($1 \le K \le N$, $1 \le |S| \le 10$)。如果字典中只有 $k$ 个这样的单词,且 $k < K$,则查询的回答将包含 $k$ 个单词。查询的响应将是一行格式为 $k S_1 S_2 \dots S_k$ 的内容,其中 $k$ 是单词数量 ($0 \le k \le K$),随后是按字典序排列的 $k$ 个单词 $S_i$。answer S_1 S_2 \dots S_N—— 回答 Lewis 的完整词典。在answer单词之后,你需要以任意顺序打印所有 $N$ 个单词,单词间用空格分隔。评测程序不会对该请求做出响应,你的程序随后应继续处理下一个测试用例,或者如果当前是最后一个测试用例,则退出。
Lewis 代码中的单词由小写英文字母组成。单词长度在 1 到 10 个字符之间。Lewis 代码中的所有单词两两不同。
每个测试中第一类查询的 $K$ 之和应不超过 $3\,800$。
违反交互协议或超过 $K$ 的总和限制会导致“Wrong answer”判决。
请确保在每次查询后打印换行符,并在每次请求后刷新输出流缓冲区(使用语言提供的 flush 命令)。否则,你的程序可能会得到“idleness limit exceeded”判决。
注意,评测程序是自适应的,即 Lewis 的单词集可能是在运行时生成的,但该集合保证与之前查询的回答一致。
样例
输入 1
1 4 1 aaa 2 aaa aba 1 cxyxy 0 1 czzzz
输出 1
query a 1 query a 4 query c 1 query cy 1 query cz 1 answer aaa aba czzzz cxyxy