CF553B Kyoya and Permutation
题目描述
定义一个长度为$n$的**排列**为仅由$1..n$的元素组成,且每个元素恰好只出现$1$次的序列。我们称数值$i\ (1\leq i \leq |p|)$在排列$p$中的映射为$p_i$。
Kyota Ootori 刚刚学习了**排列**的**循环表示法**。定义排列$p$上的一个**循环**是一个由$1..n$的一部分元素组成的序列,并且在这个序列中,任意一个元素在$p$中的映射等于下一个元素(特别地,最后一个元素的映射等于第一个元素)。
显然,我们可以将一个排列划分成多个循环。例如$p=[4,1,6,2,5,3]$可以被划分成$[1,4,2]$,$[3,6]$和$[5]$三个循环。我们在每个循环周围加上括号,然后将它们连起来,得到的就是这个排列的**循环表示法**。例如$[4,1,6,2,5,3]$的一种循环表示法是$(1\ 4\ 2)(3\ 6)(5)$。
对于一个长度不为$1$的排列,其循环表示法不是唯一的。为了使问题得到统一,我们定义一种**标准循环表示法**。即,对于每个循环,都将其最大值放在最前面,然后将这若干个循环按照最大值从小到大排列。这样,$[4,1,6,2,5,3]$的**标准循环表示法**就是$(4\ 2\ 1)(5)(6\ 3)$。
现在,Kyota 发现,如果我们去掉一个排列的**标准循环表示法**中的括号,我们将得到另一个排列。比如,由$[4,1,6,2,5,3]$可以得到$[4,2,1,5,6,3]$。
他还发现,将某些排列的**标准循环表示法**中的括号去除后,得到的排列和原排列是一样的。我们称这种排列为“**好的排列**”。他按**字典序递增**的顺序在纸上写下了长度为$n$的所有**好的排列**,结果他的朋友 Tamaki Suoh 把这个列表搞丢了。Kyota 现在想要恢复这个列表。告诉你排列的长度$n$以及$k$,请你输出**字典序从小到大**第$k$个好的排列。
输入格式
第一行输入两个空格隔开的整数$n$和$k$。
输出格式
一行,$n$个空格隔开的整数,表示要求的排列。
说明/提示
$[1,3,2,4]$的**标准循环表示法**是$(1)(3\ 2)(4)$,去掉括号后得到的是$[1,3,2,4]$,和原来的排列一样。字典序比其小的两个满足要求的序列是$[1,2,3,4]$和$[1,2,4,3]$。
$1 \leq n \leq 50$,$1 \leq k \leq 10^8$。保证长度为$n$的,第$k$个好的排列一定存在。