// ERROR A PROPÓSITO: después de explorar con el elemento, no se deshace la elección.
#include <stdio.h>
#include <string.h>

#define MAX_ITEMS 16

static void print_subset(const char *items, const int *chosen, int n) {
    printf("{");
    for (int i = 0; i < n; i++) {
        if (chosen[i]) {
            printf(" %c", items[i]);
        }
    }
    printf(" }\n");
}

static void subsets(const char *items, int *chosen, int n, int index) {
    if (index == n) {
        print_subset(items, chosen, n);
        return;
    }
    chosen[index] = 1;
    subsets(items, chosen, n, index + 1);
    subsets(items, chosen, n, index + 1);   // falta chosen[index] = 0 antes de esta línea
}

int main(void) {
    const char *items = "abc";
    int chosen[MAX_ITEMS] = {0};

    subsets(items, chosen, (int) strlen(items), 0);
    return 0;
}
