만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

대안 순열

시간 제한8초메모리 제한256 MB

요약
주어진 k에 대해 정확히 k개의 순열로 만들어지는 BST가 있는 가장 작은 n을 찾고, 사전순으로 가장 작은 순열을 출력합니다.
난이도

어려움10점 중 9점

유형
조합론, 트리, 동적 계획법, 재귀
정답자
아직 제출이 없습니다

문제

Johnny는 순열을 이진 탐색 트리(BST)로 바꾸는 변환기를 작성했다. 순열 (π1,π2,…,πn)(\pi_1, \pi_2, \ldots, \pi_n)이 주어지면 π1\pi_1을 루트에 놓는다. (π2,π3,…,πn)(\pi_2, \pi_3, \ldots, \pi_n) 가운데 π1\pi_1보다 작은 수들은 원래 순서를 유지한 채 재귀적으로 BST를 만들고, 이를 루트의 왼쪽 서브트리로 붙인다. 대칭적으로, π1\pi_1보다 큰 수들로 BST를 만들어 오른쪽 서브트리로 붙인다. Johnny는 놀랍게도 서로 다른 순열이 같은 BST를 만들 수 있다는 사실을 발견했다. 예를 들어 (2,3,1)(2, 3, 1)과 (2,1,3)(2, 1, 3)은 같은 BST를 만든다. 이 사실에 놀란 그는 Johnny's Numbers JkJ_k를 정의했다. kk번째 Johnny's Number JkJ_k는 1,2,…,n1, 2, \ldots, n의 순열 정확히 kk개로부터 얻을 수 있는, 레이블이 1,2,…,n1, 2, \ldots, n인 nn개 노드의 BST가 존재하는 가장 작은 nn이다. Johnny's Numbers를 연구하기는 어렵고, 이에 대한 관심도 줄고 있다. 주어진 kk에 대해 JkJ_k를 계산하도록 Johnny를 도와라.

입력

첫 줄에 자연수 kk (1≤k≤10111 \le k \le 10^{11})가 주어진다.

출력

첫 줄에 양의 정수 JkJ_k를 출력한다. 단, JkJ_k가 존재하고 50005000 이하일 때만 출력한다. 둘째 줄에는 kk개의 생성 순열 가운데 사전순으로 가장 작은 것을 이루는 JkJ_k개의 정수를 출력한다. 그렇지 않으면, 즉 JkJ_k가 존재하지 않거나 50005000보다 크면 NIE를 출력한다. (NIE는 폴란드어로 '아니오'라는 뜻이다.)

힌트

생성 순열이 정확히 여덟 개인 트리는 아래 그림과 같다: 이 트리를 생성하는 순열은 모두 다음과 같다: (2,1,4,3,5)(2, 1, 4, 3, 5), (2,1,4,5,3)(2, 1, 4, 5, 3), (2,4,1,3,5)(2, 4, 1, 3, 5), (2,4,1,5,3)(2, 4, 1, 5, 3), (2,4,3,1,5)(2, 4, 3, 1, 5), (2,4,3,5,1)(2, 4, 3, 5, 1), (2,4,5,1,3)(2, 4, 5, 1, 3), (2,4,5,3,1)(2, 4, 5, 3, 1).

예제1

  1. 예제 1

    입력
    8
    
    예상 출력
    5
    2 1 4 3 5