#include <iostream>
using namespace std;

const int N=20;

int n;

bool vis[N]; //判断选还是不选

void DFS(int u) //第几层就是筛选第几个数字
{
    if(u>n) //不可以有等号,如果有等号会少一层递归,即最后一层无法递归 
    {
        for(int i=1;i<=n;i++)//从1到n选择
        if(vis[i])  //把选择的数打印出来
            cout<<i<<" ";
        cout<<endl;
        return ;
    }
    else {
        vis[u]=true;//选这个数字
        DFS(u+1);

        vis[u]=false;//不选这个数字
        DFS(u+1);
    }
}
int main() {
    cin>>n;
    DFS(1);  //从1开始选择,到n结束,所以不能从0开始;
    return 0;
}