Malnar 先生最近创立了 Mensza —— 一个最伟大、最负盛名、也是唯一的国际高智商美食爱好者协会。正如你所猜到的,并不是任何人都能加入这个协会,只有在入会考试中表现出色的特殊候选人才可以。当然,考试由两个部分组成:与 IQ 相关的部分,以及与美食相关的部分。在本题中,我们将展示一个与 IQ 相关的部分,至于美食相关的部分,选手们将在比赛结束后尝试。
本故事中的入会考试候选人是 Alojzije、Benjamin 和 Cecilija。Malnar 先生打量了他们一番,设计了一个合适的问题,首先对 Alojzije 说道:
“ Alojzije,你将第一个进入我的办公室,我会给你看一个整数 $A$。然后,你需要在一张纸上写下一个整数数组 $a = (a_1, a_2, \dots, a_{l_a})$,但数组长度 $l_a$ 不能超过 $L$。”
随后,他转向 Benjamin:
“ Benjamin,你将第二个进入我的办公室,我会给你看一个整数 $B \neq A$。然后,你需要在一张纸上写下一个整数数组 $b = (b_1, b_2, \dots, b_{l_b})$,但数组长度 $l_b$ 不能超过 $L$。”
最后,他对 Cecilija 说道:
“ Cecilija,你将最后一个进入我的办公室,我会给你看一个整数数组 $c$,这个数组是我根据数组 $a$ 和 $b$ 确定的。更具体地说,对于在数组 $a$ 和 $b$ 中出现的每一个数,我会将该数在 $a$ 与 $b$ 的并集中出现的次数加入数组 $c$。同时,我会以非递减顺序将数组 $c$ 呈现给你。例如,如果 $a = (1, 2, 4)$ 且 $b = (1, 1, 2, 3)$,那么我会给你看 $c = (1, 1, 2, 3)$,因为数字 $3$ 和 $4$ 各出现一次,数字 $2$ 出现两次,数字 $1$ 出现三次。在我给你看数组 $c$ 之后,你需要告诉我整数 $A$ 和 $B$ 中哪一个更大。”
他再次对所有候选人说道:
“你们有 60 分钟的时间来思考一个策略,然后我们将开始考试。在那之后,你们将不允许再进行任何交流。我们会重复整个过程若干次,直到我确认你们并不是靠运气等到食物上桌。”
你的任务是想出一种策略,使得 Alojzije、Benjamin 和 Cecilija 能通过考试的 IQ 部分。
输入格式
第一行包含一个整数 $L$,含义如题目描述所示。
第二行包含一个整数 $Q$,表示你需要处理的场景数量。每个场景对应一次在 Malnar 先生办公室中发生的交互。
接下来的 $Q$ 行中,第 $i$ 行描述第 $i$ 个场景。该行将以 alojzije、benjamin 或 cecilija 开头,取决于被召入办公室的候选人是谁。
- 如果第 $i$ 行以
alojzije开头,则该行还会包含题目描述中的整数 $A$。 - 如果第 $i$ 行以
benjamin开头,则该行还会包含题目描述中的整数 $B$。 - 如果第 $i$ 行以
cecilija开头,则该行后面会给出 $l_c$(数组 $c$ 的长度),以及按非递减顺序排列的数组元素 $c_1 \le c_2 \le \dots \le c_{l_c}$。
输出格式
接下来的 $Q$ 行中,第 $i$ 行应包含对第 $i$ 个输入场景的回答。
- 如果第 $i$ 个输入场景的形式为
alojzije A,那么你需要先输出一个整数 $0 \le l_a \le L$(数组 $a$ 的长度),随后输出数组 $a$ 的各个元素,表示 Alojzije 在看到数字 $A$ 后会在纸上写下的数组。数组元素需要在 $0$ 到 $10^9$(含)之间。 - 如果第 $i$ 个输入场景的形式为
benjamin B,那么你需要先输出一个整数 $0 \le l_b \le L$(数组 $b$ 的长度),随后输出数组 $b$ 的各个元素,表示 Benjamin 在看到数字 $B$ 后会在纸上写下的数组。数组元素需要在 $0$ 到 $10^9$(含)之间。 - 如果第 $i$ 个输入场景的形式为
cecilija l_c c_1 \dots c_{l_c},那么如果 Cecilija 会根据数组 $c$ 判断 $A > B$,你需要输出A;反之,如果她会判断 $A < B$,则输出B。你可以假设数组 $c$ 一定是基于你在处理alojzije A和benjamin B场景时所生成的数组 $a$ 和 $b$ 得到的。你的程序可能是在之前的运行中生成了这些数组 $a$ 和 $b$。
子任务
你的解法将会被测试两次。第一次运行中,测试数据只包含 alojzije A 或 benjamin B 形式的场景。假设你的程序成功处理了所有场景并输出了合法格式的结果,那么将进行第二次运行。
在第二次运行中,所有场景都将以 cecilija 开头,相应的数组 $c$ 将根据你在第一次运行中生成的数组 $a$ 和 $b$ 的不同组合来构造。输入参数 $L$ 在两次运行中是相同的。如果你的程序在第二次运行中正确回答了所有场景,则被视为正确。提交的总运行时间为两次运行时间之和。
设 $N$ 表示某个子任务中所有测试用例里 $A$ 和 $B$ 的最大值,你的解法将根据下表评分:
| 子任务 | 分值 | 限制 |
|---|---|---|
| 1 | 11 | $N = 100,\ L = 200,\ 1 \le Q \le 10\,000$ |
| 2 | 23 | $N = 1\,000,\ L = 110,\ 1 \le Q \le 1\,000\,000$ |
| 3 | 66 | $N = 500\,000,\ L = 20,\ 1 \le Q \le 1\,000\,000$ |
样例数据
第一次运行
输入
200 3 alojzije 1 benjamin 2 alojzije 3
输出
1 23 1 42 2 11 11
说明
- Alojzije 根据数字 1 写下了 $a = (23)$。
- Benjamin 根据数字 2 写下了 $b = (42)$。
- Alojzije 根据数字 3 写下了 $a = (11, 11)$。
第二次运行
输入
200 2 cecilija 2 1 1 cecilija 2 1 2
输出
B A
说明
- 数组 $c = (1, 1)$ 是基于 $a = (23)$ 和 $b = (42)$ 生成的,因此 $A < B$。
- 数组 $c = (1, 2)$ 是基于 $a = (11, 11)$ 和 $b = (42)$ 生成的,因此 $A > B$。