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 countSetBits( int n)
{
     int count = 0;
    while (n) {
        count += n & 1;
        n >>= 1;
    }
    return count;
}

void ans(set<int> &G, int i, int liczn, int &n, vector<bool> &D){
    while(liczn<n){
        if(!D[i]) {
            liczn+=countSetBits(i);
            G.insert(i);
            D[i] = true;
        }
        if(liczn>n){
            G.erase(i-1);
            D[i-1] = false;
            ans(G, i-1, liczn, n, D);
        }
        i++;
    }
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    int liczn = 0;
    int i = 1;
    set<int> G;
    vector<bool> D(1000000, 0);
    ans(G, i, liczn, n, D);
    cout << G.size() << "\n";
    for(auto it = G.end(); it!=G.begin(); it--){
        cout << *prev(it, 1) << " ";
    }
    cout << "\n";
    return 0;
}