아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Перестановки

시간 제한2초메모리 제한512 MB

요약
서로 다른 n개의 정수가 주어질 때 이웃한 두 원소의 최대공약수가 k 이상인 순열을 사전순으로 나열하고, m번째 순열을 출력하거나 없으면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
백트래킹, 동적 계획법, 비트 연산, 조합론
정답자
아직 제출이 없습니다

문제

서로 다른 nn개의 자연수로 이루어진 집합이 주어진다. 이 집합의 원소를 나열한 순열에서 이웃한 두 원소의 최대 공약수가 모두 kk 이상이면 그 순열을 kk-순열이라고 한다. 예를 들어 집합 S={6,3,9,8}S = \{ 6, 3, 9, 8 \} 에서 순열 {8,6,3,9}\{ 8, 6, 3, 9 \} 는 22-순열이지만, 순열 {6,8,3,9}\{ 6, 8, 3, 9 \} 는 22-순열이 아니다.

순열 {p1,p2,…,pn}\{ p_1, p_2, \ldots, p_n \} 이 순열 {q1,q2,…,qn}\{ q_1, q_2, \ldots, q_n \} 보다 사전순으로 앞선다는 것은, j<ij < i 인 모든 jj 에 대해 pj=qjp_j = q_j 이고 pi<qip_i < q_i 인 자연수 ii (1≤i≤n1 \le i \le n)가 존재한다는 뜻이다.

주어진 집합의 모든 kk-순열을 사전순으로 나열하자. 예를 들어 집합 SS 의 22-순열은 모두 네 개이다. {3,9,6,8}\{ 3, 9, 6, 8 \}, {8,6,3,9}\{ 8, 6, 3, 9 \}, {8,6,9,3}\{ 8, 6, 9, 3 \}, {9,3,6,8}\{ 9, 3, 6, 8 \}. 따라서 사전순으로 첫 번째 22-순열은 {3,9,6,8}\{ 3, 9, 6, 8 \} 이고, 네 번째는 {9,3,6,8}\{ 9, 3, 6, 8 \} 이다. 이 순서에서 mm번째 kk-순열을 구해야 한다.

입력

입력 파일의 첫째 줄에는 세 자연수 nn (1≤n≤161 \le n \le 16), mm, kk (1≤m,k≤1091 \le m, k \le 10^9)가 주어진다. 둘째 줄에는 10910^9 이하인 서로 다른 자연수 nn개가 주어진다.

출력

출력 파일에 주어진 집합의 mm번째 kk-순열을 출력한다. 그러한 순열이 없으면 -1을 출력한다.

예제3

  1. 예제 1

    입력
    4 1 2
    6 8 3 9
    
    예상 출력
    3 9 6 8
    
  2. 예제 2

    입력
    4 4 2
    6 8 3 9
    
    예상 출력
    9 3 6 8
    
  3. 예제 3

    입력
    4 5 2
    6 8 3 9
    
    예상 출력
    -1