题面

大秦为你打开题目传送门

题目描述

众所周知,排序算法冒泡排序可以用如下的伪代码表示出来

1
2
3
4
5
define BubbleSort(a: array [1...n]) :
for i from 1 to n - 1 :
for j from 1 to n - 1 :
if a[j] > a[j + 1]
swap(a[j], a[j + 1])

我们把内部的一次循环称为冒泡迭代:

1
2
3
4
define BubblePass(a: array [1...n]) :
for j from 1 to n - 1 :
if a[j] > a[j + 1] :
swap(a[j], a[j + 1])

实际上,不是所有的 $n - 1$ 次冒泡迭代都会被冒泡排序执行,一些数组会在一定次数的冒泡迭代后变得有序。比如说,数组 $[2,1,3,4]$ 在一次冒泡迭代后就会变得有序。

其实有很多的数组都只会经过一次冒泡迭代就变得有序,比如说由区间 $[1,3]$ 组成的数组的数字的 $6$ 个全排列中有 $4$ 个都只需要一次冒泡迭代就可以变得有序。我们将区间 $[1,n]$ 组成的数组的全排列中只需要经过一次冒泡迭代的数量称为 $B(n)$ 。

给出 $n,k$ 你需要求出由区间 $[1,n]$ 组成的数组的全排列中按字典序排序的第 $k$ 个只需要一次冒泡迭代就可以变得有序的排列。

输入格式

此题含有多组数据输入。

每一组数据只有一行两个数字 $n,k$ 含义如题面 $(1\le n\le10^5,1\le k\le 5\times 10^{18})$ 其中 $k$ 不超过 $B(n)$ 。

最后一行,输入两个零表示读入结束。

总共的数据组数不超过 $10^6$ 。

输出格式

对于每一组数据输出一行 $n$ 个数字 —— 由区间 $[1,n]$ 组成的数组的全排列中按字典序排序的第 $k$ 个只需要一次冒泡迭代就可以变得有序的排列。

样例输入

1
2
3
4
5
3 1
3 2
3 3
3 4
0 0

样例输出

1
2
3
4
1 2 3 
3 1 2
2 1 3
3 1 2