Division
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

给出一个正整数序列 以及定值 k,每次可以选择一个区间 ,把这个区间内的 a_i 除以二下取整。是否可能通过一些操作,把所有 a_i 变成 1

若能,求出一种操作次数最少的操作方案。若有多种方案,可以输出任意一种。

输入描述:

本题有多组数据。

第一行是数据组数 T

每组数据中:

第一行两个正整数 n,k

接下来一行 n 个正整数

同一个测试点内,所有数据中 n 的和不超过

输出描述:

对于每组数据:

若无解,输出 `-1`。

若有解,第一行输出最小操作次数 m

接下来 m 行每行两个正整数 l,r,代表对  进行一次操作。
示例1

输入

复制
2
5 3
3 3 5 3 3
5 3
3 3 3 5 3

输出

复制
2
1 3
3 5
-1