1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <cstdio>

static int measure_bitpower(int x) {
    return __builtin_popcount(x);
}

int main() {
    int target_bitpower;
    scanf("%d", &target_bitpower);

    int el = 0;
    int current_bitpower = 0;

    while (current_bitpower <= target_bitpower) {
        el++;
        current_bitpower += measure_bitpower(el);
    }

    printf("%d\n", el - 1);
    bool first = true;
    while (el > 0) {
        if (measure_bitpower(el) == current_bitpower - target_bitpower) {
            current_bitpower = target_bitpower;
        } else {
            if (!first) {
                putchar(' ');
            } else {
                first = false;
            }
            printf("%d", el);
        }
        el--;
    }
    putchar('\n');

    return 0;
}