#include<iostream>
using namespace std;
const int N=16; //关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变
int n;
int st[N]; //记录每个位置当前状态,0表示还没考虑,1表示选,2表示不选
void dfs(int u){
if(u>n){ //判断边界(到最后一位),要把这个方案的结果输出
for(int i=1;i<=n;i++){
if(st[i]==1){
cout<<i<<" ";
}
}
cout<<endl;
return;
}
st[u]=2;//第一个分支,不选
dfs(u+1);//递归
st[u]=0;//恢复现场
st[u]=1;//第二的的分支,选
dfs(u+1);
st[u]=0;
}
int main(){
cin>>n;
dfs(1);
return 0;
}