J. 优雅的毒瘤

传统 1000 ms 256 MiB
标准 IO
文本比较

题目描述

fls 目睹 yky 为了造一套好题呕心沥血,日夜操劳。为了缓解 yky 的压力,fls 决定送给他一只大毒瘤。

毒瘤爱上了优雅。他知道,优雅是一种和谐。美丽,只不过美丽是上天的恩赐,而优雅则是艺术的产物。优雅从文化的陶冶中产生,也在文化的陶冶中发展。

然而毒瘤整体沉迷出题无法自拔。

在研究了大量的问题后,毒瘤发现那些复杂的问题,如果想要给出 brute force,都可以以一个很简单的问题为核心。他寻思良久,决定,将这个问题称作优雅。

下面毒瘤邀请你来编程计算一下优雅:给定一个集合 1,2,3,...,n{1,2,3,...,n},你需要输出它所有子集的所有 全排列。最后,将所有排列按照字典序升序排序。

关于全排列和字典序的定义,请参阅下面的说明。

为了进一步理解题意,请参考样例输入输出。

本题中字典序的说明

设想一本英语字典里的单词,何者在前何者在后?

一种显然的做法是先按照第一个字母、以 a,b,c,,za,b,c,\ldots,z 的顺序排列;如果第一个字母一样,那么比较第二个、第三个乃至后面的字母。如果比到最后两个单词不一样长(比如,sigh 和 sight),那么把短者排在前。

类似的,本题认为,对于一个数字 1,2,3,,n1,2,3,\ldots,n 的排列的字典序,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。例如对于 55 个数字的排列 1 2 3 5 41 2 3 4 5,排列 1 2 3 4 5 在前,排列 1 2 3 5 4 在后。按照这样的规定,5 个数字的所有的排列中最前面的是 1 2 3 4 5,最后面的是 5 4 3 2 1

本题中全排列的说明

本题取将从 nn 个不同元素中任取 m(0mn)m(0\leq m \leq n) 个元素,按照一定的顺序排列起来,定义为从 nn 个不同元素中取出 mm 个元素的一个排列的说法,而当 m=nm=n 时所有的排列情况本题称其为全排列。

1,2,31,2,3 三个元素的全排列为:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

输入格式

仅一个整数 n(1n6)n(1\leq n \leq 6),代表集合大小,集合中元素参见问题描述。

输出格式

总全排列数行,每行一个互不相同的非空子集的排列(对于一个排列,相邻整数之间用空格分隔),所有排列按字典序升序输出。

样例

样例输入1

2

样例输出1

1
1 2
2
2 1

样例解释1

输入给定 n=2n=2,因此原集合是 S=1,2S={1,2}

集合 SS 的非空子集有 1,2,1,2{1},{2},{1,2}

对于 1{1},它的所有排列为 [1][1]

对于 2{2},它的所有排列为 [2][2]

对于 1,2{1,2},它的所有排列为 [1,2],[2,1][1,2],[2,1]

因此,SS 所有子集的所有排列共有 44 个:[1],[2],[1,2],[2,1][1],[2],[1,2],[2,1]

将它们按照字典序升序排序,即

1
1 2
2
2 1

样例输入2

3

样例输出2

1 
1 2 
1 2 3 
1 3 
1 3 2 
2 
2 1 
2 1 3 
2 3 
2 3 1 
3 
3 1 
3 1 2 
3 2 
3 2 1