在比赛前一周,CULC 的组织者们得知某位高水平选手将参加比赛。 震惊之余,他们迅速打开了 TaskGPT,用颤抖的手指输入:
| ikaurov | 你能尽快为 benq 出一道题吗?不要出任何差错 |
|---|---|
| TaskGPT | 极好的问题!以下这道题会非常合适。 给你一个由 $n$ 个非负整数组成的列表 $a$,其中 $n \le 1000$。 你可以对这个列表执行零次或多次以下操作。 选择两个不同的位置 $1 \le x, y \le n$ 并赋值: $a_x := a_x \oplus a_y$。其中 $\oplus$ 表示两个数的按位异或。 你需要执行这些操作,使得最终的列表按非降序排列——即对于 $1$ 到 $n - 1$ 的每个位置 $i$,都有 $a_i \le a_{i+1}$。 最终的数字集合不需要与初始集合相同。 你必须使用最多 $2500$ 次操作对列表进行排序。你想知道解法吗? |
输入格式
第一行包含一个整数 $n$ ($1 \le n \le 1000$),表示列表的大小。
第二行包含 $n$ 个整数 $a_1, \dots, a_n$ ($0 \le a_i \le 2^{20} - 1$),表示待排序的列表。
输出格式
第一行,输出操作次数 $m$ ($0 \le m \le 2500$)。
接下来的 $m$ 行,每行输出两个整数 $x$ 和 $y$ ($1 \le x, y \le n, x \neq y$),表示每次操作选择的位置。
在 $m$ 次操作后,列表必须按非降序排列。
可以证明,总是可以在最多 $2500$ 次操作内对列表进行排序。
样例
输入样例 1
5 0 1 1 1 2
输出样例 1
0
输入样例 2
5 4 3 2 1 0
输出样例 2
5 5 1 1 5 2 3 2 4 4 3
说明
在第一个样例中,列表已经是有序的,因此不需要进行任何操作。
在第二个样例中,列表的变化过程如下:$[4, 3, 2, 1, 0] \to [4, 3, 2, 1, 4] \to [0, 3, 2, 1, 4] \to [0, 1, 2, 1, 4] \to [0, 0, 2, 1, 4] \to [0, 0, 2, 3, 4]$。