#include <stdio.h>
#include <stdlib.h>
void dfs(int arr[], int pos, int take_num, int n, int next, int is_first) {
if (pos >= take_num) {
/* 1個の組み合わせが最後まで求まった */
int i;
if (is_first
== 0) printf(", "); /* 組み合わせを出力する */
for (i = 0; i < take_num; i++) {
if (take_num == n) {
} else {
}
}
if (take_num
== 1 && n
> 1 && is_first
) putchar(' '); } else {
int i;
/* 組み合わせを作る数字が足りないので、枝刈りを行う */
if (n - next + 1 < take_num - pos) return;
/* 次の数字を探索する */
for (i = next; i < n; i++) {
arr[pos] = i;
dfs(arr, pos + 1, take_num, n, i + 1, is_first);
is_first = 0;
}
}
}
int main(void) {
int n;
int i;
int *arr;
/* 入力 */
if (scanf("%d", &n
) != 1 || n
<= 0) { return 1;
}
/* メモリ確保 */
arr
= (int *) malloc(sizeof(int) * n
); if (arr == NULL) {
puts("memory allocate error"); return 1;
}
/* 各rごとに組み合わせを取得する */
for (i = 1; i <= n; i++) {
dfs(arr, 0, i, n, 0, 1);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnZvaWQgZGZzKGludCBhcnJbXSwgaW50IHBvcywgaW50IHRha2VfbnVtLCBpbnQgbiwgaW50IG5leHQsIGludCBpc19maXJzdCkgewoJaWYgKHBvcyA+PSB0YWtlX251bSkgewoJCS8qIDHlgIvjga7ntYTjgb/lkIjjgo/jgZvjgYzmnIDlvozjgb7jgafmsYLjgb7jgaPjgZ8gKi8KCQlpbnQgaTsKCQlpZiAoaXNfZmlyc3QgPT0gMCkgcHJpbnRmKCIsICIpOwoJCS8qIOe1hOOBv+WQiOOCj+OBm+OCkuWHuuWKm+OBmeOCiyAqLwoJCXByaW50ZigieyAiKTsKCQlmb3IgKGkgPSAwOyBpIDwgdGFrZV9udW07IGkrKykgewoJCQlpZiAoaSA+IDApIHB1dGNoYXIoJywnKTsKCQkJaWYgKHRha2VfbnVtID09IG4pIHsKCQkJCXByaW50ZigiJWQiLCBhcnJbaV0gKyAxKTsKCQkJfSBlbHNlIHsKCQkJCXByaW50ZigiJWQiLCBhcnJbaV0pOwoJCQl9CgkJfQoJCXByaW50ZigiIH0iKTsKCQlpZiAodGFrZV9udW0gPT0gMSAmJiBuID4gMSAmJiBpc19maXJzdCkgcHV0Y2hhcignICcpOwoJfSBlbHNlIHsKCQlpbnQgaTsKCQkvKiDntYTjgb/lkIjjgo/jgZvjgpLkvZzjgovmlbDlrZfjgYzotrPjgorjgarjgYTjga7jgafjgIHmnp3liIjjgorjgpLooYzjgYYgKi8KCQlpZiAobiAtIG5leHQgKyAxIDwgdGFrZV9udW0gLSBwb3MpIHJldHVybjsKCQkvKiDmrKHjga7mlbDlrZfjgpLmjqLntKLjgZnjgosgKi8KCQlmb3IgKGkgPSBuZXh0OyBpIDwgbjsgaSsrKSB7CgkJCWFycltwb3NdID0gaTsKCQkJZGZzKGFyciwgcG9zICsgMSwgdGFrZV9udW0sIG4sIGkgKyAxLCBpc19maXJzdCk7CgkJCWlzX2ZpcnN0ID0gMDsKCQl9Cgl9Cn0KCmludCBtYWluKHZvaWQpIHsKCWludCBuOwoJaW50IGk7CglpbnQgKmFycjsKCS8qIOWFpeWKmyAqLwoJaWYgKHNjYW5mKCIlZCIsICZuKSAhPSAxIHx8IG4gPD0gMCkgewoJCXB1dHMoImJhZCBpbnB1dCIpOwoJCXJldHVybiAxOwoJfQoJLyog44Oh44Oi44Oq56K65L+dICovCglhcnIgPSAoaW50ICopIG1hbGxvYyhzaXplb2YoaW50KSAqIG4pOwoJaWYgKGFyciA9PSBOVUxMKSB7CgkJcHV0cygibWVtb3J5IGFsbG9jYXRlIGVycm9yIik7CgkJcmV0dXJuIDE7Cgl9CgkvKiDlkIRy44GU44Go44Gr57WE44G/5ZCI44KP44Gb44KS5Y+W5b6X44GZ44KLICovCglmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWRmcyhhcnIsIDAsIGksIG4sIDAsIDEpOwoJCXB1dGNoYXIoJ1xuJyk7Cgl9CglmcmVlKGFycik7CglyZXR1cm4gMDsKfQo=
{ 0 } , { 1 }, { 2 }, { 3 }
{ 0,1 }, { 0,2 }, { 0,3 }, { 1,2 }, { 1,3 }, { 2,3 }
{ 0,1,2 }, { 0,1,3 }, { 0,2,3 }, { 1,2,3 }
{ 1,2,3,4 }