P15748 [JAG 2024 Summer Camp #3] Halfway Through the Book

题目描述

JAG 出版社出版了一本名为《排列汇编大全》的书。这本书非常厚,总共有 $2^N - 1$ 页。每一页都包含一个长度为 $N$ 的排列 $\mathbf{P}$(即 $(1, \ldots, N)$ 的一个重排)的一个**非空子序列**(不一定是连续的)。每个子序列按照字典序恰好出现一次。换句话说,在第 $k$ 页上,你会找到所有非空子序列中,字典序第 $k$ 小的 $\mathbf{P}$ 的子序列。 你曾试图读完这本书,但放弃了。不过,你想向朋友们炫耀你读了一半,因此你需要找到**正中间那一页**(即第 $2^{N-1}$ 页)上的序列。你的任务是确定这个序列。

输入格式

输入包含一个单独的测试用例,格式如下。 $$\begin{aligned} & N \\ & P_1 \ P_2 \ \ldots \ P_N \end{aligned}$$ 第一行包含一个整数 $N$,表示排列 $\mathbf{P}$ 的长度。$N$ 的取值范围是 $1$ 到 $10,000$。第二行包含 $N$ 个整数 $P_1, \ldots, P_N$($1 \leq P_i \leq N$),表示排列 $\mathbf{P}$。

输出格式

在第一行,输出一个整数 $M$,表示第 $2^{N-1}$ 页上序列的长度。在第二行,输出 $M$ 个整数 $Q_1, Q_2, \ldots, Q_M$,表示第 $2^{N-1}$ 页上的子序列。