Module: 动态规划中的模式 - 2


Problem

5 /5


排列

Problem

给定一组 n 个不同的自然数。如果此排列的任何两个相邻元素的最大公约数至少为 k,则此集合的元素排列称为 k-排列。例如,如果给定元素集 S = {6, 3, 9, 8},则排列 {8, 6, 3, 9} 是一个 2-排列,而排列 {6, 8, 3, 9} –没有。

排列 {p1, p2, …, pn} 将在字典序上小于排列 {q1< /sub>, q2, …, qn} 如果存在正整数 i (1 ≤ i ≤ n) 使得 pj = qj 当 j <;我和 pi < qi.

例如,让我们按字典顺序对上述集合的所有 k-排列进行排序。例如,S 正好有四个 2-排列:{3, 9, 6, 8}、{8, 6, 3, 9}、{8, 6, 9, 3} 和 {9, 3, 6 , 8} 。因此,字典顺序中的第一个 2-排列是集合 {3, 9, 6, 8},第四个 -设置 {9, 3, 6, 8}。

你需要编写一个程序,让你可以按此顺序找到第 m 个 k 排列。

输入
第一行的输入文件包含三个自然数—— n (1 ≤ n ≤ 16), m 和 k (1 ≤ m, k ≤ 109)。第二行包含 n 个不超过 109 的不同自然数。行中的所有数字均以空格分隔。

印记
有必要输出给定集合的第 m 个 k-排列,如果输出文件中没有,则输出 –1。
例子
<头> <正文>
# 输入 输出
1 4 1 2
6 8 3 9
3 9 6 8
2 4 4 2
6 8 3 9
9 3 6 8
3 4 5 2
6 8 3 9
-1