#include <stdio.h>
#include <stdlib.h>
int count = 0;
void combination(int *a, int l, int n, int left) {
        if (l == n && left) return;
        else if (!left) {
                for (int i = 0; i < n; i++) if (a[i]) printf("%d ", i + 1);
                printf("\n");
                count++;
        }
        else {
                if (!a[l]) {
                        for (int i = 1; i >= 0; i--){
                                a[l] = i;
                                combination(a, l + 1, n, left - i);
                        }
                }
                else combination(a, l + 1, n, left);
        }
}
void gen (int n, int m ,int c, int *s) {
        int *combination_buffer = malloc(n * sizeof(int));
        for (int i = 0; i < c; i++) combination_buffer[s[i] - 1] = 1;
        combination(combination_buffer, 0, n,  m - c);
}
int main() {
        int s[4] = {1 ,5 , 11, 20};
        int n = 42, m = 6, c = 4;
        gen(n, m, c, s);
        printf("%d\n", count);
        return 0;
}
