Euclid Guess

题意翻译

### 题目描述 下面是一个经过部分改动的求 $\gcd$ 的伪代码(其中 $t$ 是一个初始为空的序列): ```plain function Euclid(a, b): if a < b: swap(a, b) if b == 0: return a r = reminder from dividing a by b (即设 r 为 a mod b) if r > 0: append r to the back of t (即将 r 插入到 t 的尾部) return Euclid(b, r) ``` 有一个由数对构成的序列 $p$,接下来我们对 $p$ 中每个数对都执行一次上述函数,然后把 $t$ 重新排列并给定到输入中。 给定 $n,m$ 和长度为 $n$ 的序列 $t$。 你需要构造一个长度不超过 $2\times10^4$ 的数对序列 $p$,满足: - 每个数对中的元素都是不超过 $m$ 的正整数。 - 根据序列 $p$ 可以经过上述操作得到输入中给定的 $t$。 有解输出任意一组解,无解输出 `-1`。 ### 输入格式 第一行输入两个整数 $n,m(1\leq n\leq10^3;1\leq m\leq10^9)$。 接下来一行输入 $n$ 个整数表示 $t_1,t_2,\cdots,t_n(1\leq t_i\leq m)$。 ### 输出格式 如果无解,输出一行 `-1`。 否则,首先输出一行一个整数 $k(1\leq k\leq2\times10^4)$ 表示你构造的 $p$ 的长度。 接下来输出 $k$ 行,其中第 $i$ 行输出两个整数 $a_i,b_i(1\leq a_i,b_i\leq m)$ 表示 $p$ 中第 $i$ 个数对。 ### 样例解释 对于样例一: - 数对 $(19,11)$ 会将 $8,3,2,1$ 四个数插入到 $t$ 中。 - 数对 $(15,9)$ 会将 $6,3$ 两个数插入到 $t$ 中。 - 数对 $(3,7)$ 会将 $1$ 这个数插入到 $t$ 中。 最终 $t=[8,3,2,1,6,3,1]$,经过重新排列后可以得到输入中给定的 $[1,8,1,6,3,2,3]$。

题目描述

Let's consider Euclid's algorithm for finding the [greatest common divisor](https://en.wikipedia.org/wiki/Greatest_common_divisor), where $ t $ is a list: ``` <pre class="verbatim"><br></br>function Euclid(a, b):<br></br> if a < b:<br></br> swap(a, b)<br></br><br></br> if b == 0:<br></br> return a<br></br><br></br> r = reminder from dividing a by b<br></br> if r > 0:<br></br> append r to the back of t<br></br><br></br> return Euclid(b, r)<br></br> ``` There is an array $ p $ of pairs of positive integers that are not greater than $ m $ . Initially, the list $ t $ is empty. Then the function is run on each pair in $ p $ . After that the list $ t $ is shuffled and given to you. You have to find an array $ p $ of any size not greater than $ 2 \cdot 10^4 $ that produces the given list $ t $ , or tell that no such array exists.

输入输出格式

输入格式


The first line contains two integers $ n $ and $ m $ ( $ 1 \le n \le 10^3 $ , $ 1 \le m \le 10^9 $ ) — the length of the array $ t $ and the constraint for integers in pairs. The second line contains $ n $ integers $ t_1, t_2, \ldots, t_n $ ( $ 1 \le t_i \le m $ ) — the elements of the array $ t $ .

输出格式


- If the answer does not exist, output $ -1 $ . - If the answer exists, in the first line output $ k $ ( $ 1 \le k \le 2 \cdot 10^4 $ ) — the size of your array $ p $ , i. e. the number of pairs in the answer. The $ i $ -th of the next $ k $ lines should contain two integers $ a_i $ and $ b_i $ ( $ 1 \le a_i, b_i \le m $ ) — the $ i $ -th pair in $ p $ . If there are multiple valid answers you can output any of them.

输入输出样例

输入样例 #1

7 20
1 8 1 6 3 2 3

输出样例 #1

3
19 11
15 9
3 7

输入样例 #2

2 10
7 1

输出样例 #2

-1

输入样例 #3

2 15
1 7

输出样例 #3

1
15 8

输入样例 #4

1 1000000000
845063470

输出样例 #4

-1

说明

In the first sample let's consider the array $ t $ for each pair: - $ (19,\, 11) $ : $ t = [8, 3, 2, 1] $ ; - $ (15,\, 9) $ : $ t = [6, 3] $ ; - $ (3,\, 7) $ : $ t = [1] $ . So in total $ t = [8, 3, 2, 1, 6, 3, 1] $ , which is the same as the input $ t $ (up to a permutation). In the second test case it is impossible to find such array $ p $ of pairs that all integers are not greater than $ 10 $ and $ t = [7, 1] $ In the third test case for the pair $ (15,\, 8) $ array $ t $ will be $ [7, 1] $ .