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
38
39
40
41
42
43
44
45
46
#include<bits/stdc++.h>
using namespace std;

int n;
unsigned int next_value;

int count_bits(unsigned int value) {
    bitset<sizeof(value) * CHAR_BIT> bits (value);
    return bits.count();
}

int find_ban(unsigned int max_value, int bits) {
    int ban = 0;
    for (unsigned int i = 0; i < max_value; i++) {

        if (count_bits(i) == bits) {
            ban = i;
        }
    }

    return ban;
}

int main() {

    ios_base::sync_with_stdio(false);

    cin >> n;

    while (n > 0) {
        next_value++;
        n -= count_bits(next_value);
    }

    unsigned int banned_value = find_ban(next_value, abs(n));

    cout << (banned_value ? next_value - 1 : next_value) << "\n";

    do {
        if (next_value != banned_value) {
            cout << next_value << " ";
        }
    } while (--next_value);

    return 0;
}