#include <iostream>
using namespace std;
void print_subset(int n) {
for(int i = 0; i < (1<<n); i++) {
//i:0~2^n,每个i的二进制数对应一个子集,一次打印一个子集,最后得到所有子集
for(int j = 0; j < n; j++) { //打印一个子集,即打印i的二进制数中所有的1
if (i & (1<<j)) { //从i的最低位开始逐个检查每一位,如果是1,打印
cout << j << " ";
}
}
cout << endl;
}
}
int main()
{
int n;
cin >> n; //n:集合中元素的总数量
print_subset(n); //打印所有的子集
return 0;
}