给定一个整数 $S$ 和一个包含 $N$ 个非负整数的数组 $A$(下标从 1 开始)。你可以对数组执行以下操作:选择任意下标 $i$ ($1 \le i \le N$),选择其相邻的一个下标 $j$ ($1 \le j \le N$,且满足 $j = i - 1$ 或 $j = i + 1$),并将 $A_i$ 替换为 $(A_i \oplus A_j)$,其中 $\oplus$ 表示按位异或运算。异或的定义见题目末尾。
你的目标是将 $A$ 转换为一个有序数组: 若 $S = 1$,则最终数组必须严格递增,即对于 $1 \le i < N$,满足 $A_i < A_{i+1}$。 若 $S = 2$,则最终数组必须非递减,即对于 $1 \le i < N$,满足 $A_i \le A_{i+1}$。
请找出任意一组能达到目标的合法操作序列。你不需要最小化操作次数,只要总操作次数不超过 $40000$ 即可。
输入格式
第一行包含两个整数 $N$ 和 $S$。 第二行包含 $N$ 个整数,即数组 $A$ 的元素。
输出格式
第一行输出一个整数 $K$ ($0 \le K \le 40000$),表示操作次数。 接下来的 $K$ 行,每行包含两个整数,按时间顺序描述操作:第一个整数为被替换元素的下标 $i$,第二个整数为参与运算的另一个元素的下标 $j$。
数据范围
- $1 \le S \le 2$
- $2 \le N \le 1000$
- $0 \le A_i < 2^{20}$
子任务
- (25 分) $2 \le N \le 150, S = 1$,数组 $A$ 中所有元素互不相同。
- (35 分) $2 \le N \le 200, S = 1$,数组 $A$ 中所有元素互不相同。
- (40 分) $2 \le N \le 1000, S = 2$。
样例
样例输入 1
5 1 3 2 8 4 1
样例输出 1
3 1 2 4 3 5 4
说明 1
$[3, 2, 8, 4, 1] \to [1, 2, 8, 4, 1] \to [1, 2, 8, 12, 1] \to [1, 2, 8, 12, 13]$
样例输入 2
5 2 4 4 2 0 1
样例输出 2
3 3 2 4 3 5 4
说明 2
$[4, 4, 2, 0, 1] \to [4, 4, 6, 0, 1] \to [4, 4, 6, 6, 1] \to [4, 4, 6, 6, 7]$
当对 $a$ 和 $b$ 的位进行异或运算时,若 $a=b$ 则结果为 $0$,否则为 $1$。 当对整数 $a$ 和 $b$ 进行按位异或运算时,结果是对每一位分别进行异或运算: $75 \oplus 29 = 86$ $1001011 \oplus 0011101 = 1010110$
在 C/C++/Java 中,可以使用 ^ 运算符执行异或操作。