小苯的重排构造
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}小苯拿到了一个长为 n、仅由整数 1 或 2 组成的数组 a = \{a_1,a_2,\dots,a_n \}
\hspace{15pt}现在小红想要让小苯将其重排得到数组 a' = \{a'_1,a'_2,\dots,a'_n \},使得 \sum\limits_{i = 1}^{n - 1}{\gcd\left(a'_i, a'_{i+1} \right) = k}
\hspace{15pt}请你帮帮小苯。

【名词解释】
\hspace{15pt}最大公因数(gcd):指多个整数共有因数中最大的一个。例如,121830 的公因数有 1,2,3,6,其中最大的因数是 6,因此 \gcd(12,18,30)=6。特殊的,定义 \gcd\left(0,x \right) = x

输入描述:

\hspace{15pt}第一行输入两个整数 n,k\left(2 \leqq n \leqq 2\times10^5;\ 0\leqq k \leqq 2 \times n\right)
\hspace{15pt}第二行输入 n 个整数 a_1,a_2,\dots,a_n \left(1 \leqq a_i \leqq 2\right),代表数组中的元素。

输出描述:

\hspace{15pt}如果不存在满足条件的重排方案,直接输出 -1;否则,在一行上输出 n 个整数,代表重排后的数组。
\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
4 4
1 2 1 2

输出

复制
1 2 2 1

说明

\hspace{15pt}在这个样例中:
\hspace{23pt}\bullet\,\gcd(a_1,a_2)=\gcd(1,2)=1
\hspace{23pt}\bullet\,\gcd(a_2,a_3)=\gcd(2,2)=2
\hspace{23pt}\bullet\,\gcd(a_3,a_4)=\gcd(2,1)=1
示例2

输入

复制
4 4
1 1 1 2

输出

复制
-1