跳一跳(Jump Jump)是一款风靡一时的数字跳跃游戏。在游戏中,玩家面对一个由数字 $$$1$$$ 到 $$$n$$$ 排列而成的台阶序列,每次可以跳到任意一个比当前数字更大的数字台阶上。游戏的目标是从最左边开始,通过一系列跳跃到达最右边,并尽可能地获得更长的连续递增跳跃序列。
最近,游戏开发者小 G 决定为玩家设计一些新的挑战关卡。他发现,一个关卡的难度与其中"最长上升子序列"(LIS)的数量密切相关:LIS 数量越多,玩家解锁隐藏成就的路径就越多,关卡也越具有挑战性和趣味性。小 G 很快制作出了 $$$K$$$ 较小时的若干关卡,但他发现,当 $$$K$$$ 很大时,他并不能想到如何快速制作关卡。
于是,小 G 求助于你,因此,设计新关卡的任务就交给了你:对于给定的目标数量 $$$K$$$,你需要构造一个台阶序列(即一个排列),使得这个排列中恰好包含 $$$K$$$ 个不同的最长上升子序列。注意,作为关卡设计师,你可以在保证 $$$1\le n\le 1500$$$ 的前提下,自由选择排列的长度 $$$n$$$。
第一行输入一个整数 $$$K$$$,保证 $$$1\le K \lt 2^{30}$$$。
第一行输出一个正整数 $$$n$$$,需要保证 $$$1\le n\le 1500$$$。
第二行输出一个 $$$1$$$ 到 $$$n$$$ 的排列 $$$p$$$,你需要保证它的最长上升子序列个数恰好为 $$$K$$$。
可以证明在题目给出的限制条件下,总是存在至少一个满足要求的排列。
1
3 1 2 3
2
4 3 4 1 2
4
4 2 1 4 3