Tokitsukaze and New RenKinKama
题号:NC249016
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

一种新式的炼金釜在年轻的炼金术士中传开。它很便利,只需要把一些素材按照某种顺序围成一圈,就能完美发挥出素材所有的潜力。

Tokitsukaze 通过手中的稀有道具交换到了这个新式炼金釜,现在她想使用这个新式炼金釜来炼成道具。她按顺序放入了 n 个素材,并使它们围成一圈,第 i 个素材的潜力为 v_i。但在炼成的过程中发现,相邻素材的潜力的差值必须小于等于炼金釜的承受能力 k,不然炼金釜会发生爆炸导致炼成失败。也就是说需要满足,当 i=1|v_1 - v_n| \leq k,接着对于所有的 i=2 \ldots n|v_i - v_{i-1}| \leq k,这时候才能成功炼成道具,否则就会爆炸。

现在 Tokitsukaze 可以选择任意两个位置的素材并交换它们的位置。但她已经没有多少时间来调整素材的顺序了,最多只能进行 2 次交换操作。

Tokitsukaze 能否通过最多 2 次的交换操作,来避免炼金釜爆炸,成功炼成道具?如果能,请输出操作方案,否则输出 -1

输入描述:

第一行包含一个整数 T (1 \leq T \leq 300)~--- 测试数据的组数。

对于每组测试数据:

第一行包含两个整数 n, k (1 \leq n \leq 300, 0 \leq k \leq 10^9) --- 素材的个数以及炼金釜的承受能力 k

第二行包含一个长度为 n 的序列 v_1, v_2, \ldots, v_n (0 \leq v_i \leq 10^9) --- 每个素材的潜力值。要注意这些素材是按输入顺序围成一圈。

数据保证 \sum n \leq 300

输出描述:

对于每组测试数据:如果不能避免炼金釜爆炸,则输出 -1

否则输出 m+1 行:

第一行含一个整数 m (0 \leq m \leq 2),表示操作次数。

接下来 m 行,每行输出选择的两个下标 i, j (1 \leq i,j \leq n), 表示要交换当前的第 i 个素材和第 j 个素材。

如果有多种方案,输出任意一种即可。注意:不需要使操作次数最少。
示例1

输入

复制
5
10 1
1 2 3 2 1 2 3 2 1 2
10 1
1 2 3 2 1 2 3 2 1 2
10 1
1 2 3 2 1 2 3 2 1 2
10 1
1 2 3 2 2 1 3 1 2 2
10 1
2 2 3 3 1 2 2 1 1 2

输出

复制
0
1
1 1
2
1 5
1 1
2
6 1
7 1
1
4 1

说明

前3组测试数据的输入都相同,提示你可以输出任意一种方案。