#include <stdio.h>
#include <stdlib.h>
int next_perm(int *v, int lenght, int n, FILE* out) {
int i;
if (v[0] == n) {
fprintf(out, "%d \n", n);
return 0;
}
for (i = 0 ; i < lenght ; ++i) {
fprintf(out, "%d ", v[i]);
}
fprintf(out, "\n");
if (v[lenght - 1] < n) {
v[lenght] = v[lenght - 1] + 1;
return next_perm(v, lenght + 1, n, out);
} else {
v[lenght - 2]++;
return next_perm(v, lenght - 1, n, out);
}
}
int main() {
FILE *in, *out;
if (((in = fopen("submultimi.in", "rt")) == NULL)) {
printf("Nu am putut deschide fisierul de input!");
return -1;
}
if (((out = fopen("submultimi.out", "wt")) == NULL)) {
printf("Nu am putut deschide fisierul de output!");
return -2;
}
int n;
fscanf(in, "%d", &n);
int *v = malloc(n * sizeof(int));
if (v == NULL) {
printf("Nu am putut aloca memorie\n");
return -3;
}
for (int i = 0 ; i < n ; ++i) {
v[i] = i + 1;
}
next_perm(v, 1, n, out);
// Freeing the memory
free(v);
fclose(in);
fclose(out);
return 0;
}