紧张的第一天比赛已经结束……尽管科学委员会勉强抵御了针对评测服务器的黑客攻击,但他们担心这影响了提交记录的评分。现在只有一个选择:所有提交记录必须重新评测!
评测服务器拥有 $N$ 个处理器核心。委员会已经为每个核心分配了一份包含 $S$ 个提交记录的列表,其中每个提交记录对应比赛的 $T$ 个任务之一(编号为 $1, \dots, T$)。委员会确保了 $S$ 是 2 的幂次。现在,在接下来的 $S$ 分钟内,每个核心每分钟将评估其列表中的恰好一个提交记录。
不幸的是,包含任务数据的数据库非常脆弱,如果针对单个任务数据的并发请求数量波动过大,数据库可能会崩溃。因此,委员会希望对每个核心的提交记录进行排序,使得在重新评测期间,对于任何单个任务,同时被评估的提交记录数量的最大值和最小值之差不超过 1。
编写一个程序,计算出这样一种提交记录到核心的有序分配方案。
输入格式
第一行包含上述三个整数 $N, S$ 和 $T$。
接下来 $N$ 行描述分配给各核心的提交记录。第 $i$ 行包含 $S$ 个整数 $t_1, \dots, t_S$ ($1 \le t_j \le T$),表示第 $i$ 个核心被分配了分别对应任务 $t_1, \dots, t_S$ 的提交记录。
输出格式
你的程序应输出 $N$ 行,描述提交记录到核心的有序分配方案,使得对于任何单个任务,同时被评估的提交记录数量的最大值和最小值之差不超过 1:第 $i$ 行应包含 $S$ 个整数 $r_1, \dots, r_S$,表示第 $i$ 个核心在第 $j$ 分钟评估对应任务 $r_j$ 的提交记录。保证对于每个测试用例,这样的分配方案都存在。
数据范围
我们始终有 $S = 2^k$,其中 $k$ 为某个正整数,$1 \le N, S, T \le 100\,000$ 且 $N \cdot S \le 500\,000$。
- 子任务 1(10 分):$S = 2$ 且 $N, T \le 20$。
- 子任务 2(15 + 5 + 5 分):$S = 2$。
- 子任务 3(15 + 5 + 5 分):$N \cdot S \le 10\,000$。
- 子任务 4(20 + 10 + 10 分):无额外限制。
部分分说明:在子任务 2、3 和 4 中,你可以通过括号内指示的方式获得部分分: 第一个数字表示如果你解决了所有满足 $T \le N$ 且每个任务的总提交数能被 $S$ 整除的测试用例所获得的积分。 第二个数字表示如果你更一般地解决了所有满足 $T \le N$ 的测试用例所获得的额外积分。 * 第三个数字表示如果你解决了所有测试用例所获得的额外积分。
在网页界面中,这显示为相应子任务的“Group 1”、“Group 2”和“Group 3”。
注:在 QOJ 上,子任务 2、3、4 的部分分被显示为独立的子任务。子任务 2 ~ 4 对应原问题子任务 2 中的测试组,子任务 5 ~ 7 对应原问题子任务 3 中的测试组,子任务 8 ~ 10 对应原问题子任务 4 中的测试组。
样例
输入 1
3 2 3 1 2 2 3 2 3
输出 1
2 1 3 2 2 3
说明 1
在第一个样例的输出中,任务 1 和任务 2 的同时评估提交记录数量的最大值与最小值之差为 1,任务 3 为 0。另一方面,如果按照输入中的顺序排列提交记录,则不构成有效的输出,因为任务 3 的同时评估提交记录数量的最大值与最小值之差为 2。
输入 2
3 4 3 2 3 2 2 2 3 3 2 2 2 3 2
输出 2
2 2 2 3 3 2 3 2 2 3 2 2
说明 2
在第二个样例的输出中,所有三个任务的同时评估提交记录数量的最大值与最小值之差均为 0。