/**
需要两个参数
1.目前枚举到哪个参数 u
2.枚举到的数是否被选,也就是这个数的状态
**/
import java.util.Scanner;
public class Main {
static int n;
static boolean[] st;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
st = new boolean[n + 1];
dfs(1);//按照数的顺序来枚举,从第一个数来判断选还是不选
}
private static void dfs(int u) {
// TODO Auto-generated method stub
if(u > n) {//说明所有数都已经递归完毕
for(int i = 1;i<=n;i++) {
if(st[i]) {
System.out.print(i + " ");
}
}
System.out.println();
return;//一定要有这个结束语句
}
//选择这个数
st[u] = true;
dfs(u + 1);
//不选择这个数
st[u] = false;
dfs(u + 1);
}
}