# include <stdio.h>
# include <math.h>
# include <string.h>
#define N 15
///深搜递归状态压缩算法
int n;
int st[N] ;///数据最大范围.记录每个位置当前状态:0表示还没考虑,1表示选择它,2表示不选它
void dfs(int u){
if(u==n){///遍历到每棵分支的边界,退出循环
int i;
for(i=0;i<n;i++){///遍历到每棵分支的边界
if(st[i]==1){///1表示打印选择的
printf("%d ",i+1);
}
}
printf("\n");
return;
}
st[u]=2;///第一个分支,不选它
dfs(u+1);///先递归进入每个分支的末节点.之后向根部回溯
st[u]=0;/// 恢复现场
st[u]=1;///第一个分支,选它
dfs(u+1);
st[u]=0;///恢复现场
}
int main(){
scanf("%d",&n);
dfs(0);///从零开始遍历
return 0;
}