Module: 動的プログラミングのパターン - 2


Problem

5 /5


順列

Problem

n 個の異なる自然数のセットが与えられる。このセットの要素の並べ替えは、この並べ替えの任意の 2 つの隣接する要素の最大公約数が少なくとも k である場合、k-並べ替えと呼ばれます。たとえば、要素のセット S = {6, 3, 9, 8} が与えられた場合、順列 {8, 6, 3, 9} は 2 順列であり、順列 {6, 8, 3, 9} –いいえ

順列 {p1, p2, …, pn} は、辞書順に順列 {q1< より小さくなります。 /sub>, q2, …, qn} pj となるような正の整数 i (1 ≤ i ≤ n) が存在する場合= qj の場合、j <; i と pi <; qi.

例として、上記のセットのすべての k 順列を辞書順に並べてみましょう。たとえば、S の 2 順列はちょうど 4 つあります: {3, 9, 6, 8}、{8, 6, 3, 9}、{8, 6, 9, 3}、および {9, 3, 6 、8}。したがって、辞書編集順の最初の 2 順列は集合 {3, 9, 6, 8} であり、4 番目の – は集合 {3, 9, 6, 8} です。 {9、3、6、8} を設定します。

この順序でm番目のk順列を見つけることができるプログラムを書く必要があります。

入力
入力ファイルの最初の行には 3 つの自然数が含まれています。 n (1 ≤ n ≤ 16)、m および k (1 ≤ m、k ≤ 109)。 2 行目には、109 を超えない n 個の異なる自然数が含まれています。行内のすべての数字はスペースで区切られています。

インプリント
指定されたセットの 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