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
#include<bits/stdc++.h>
using namespace std;
const int SIZE = 1e6+1;
int dp[SIZE];
int ile[SIZE];
int dp2[SIZE];

int main() {
    cout.tie(0); cin.tie(0); ios::sync_with_stdio(0);
    int n; cin>>n;
    for(int i=n; i>0; i--) {
        for(auto j: bitset<20>(i).to_string()) {
            if(j=='1') dp[i]++;
  //          cout<<j<<' ';
        }
//        cout<<'\n';
    }
    int found = 0, foundVal;
    for(int i=1; i<=n; i++) {
        dp2[i] = dp2[i-1] + dp[i];
  //      cout<<dp2[i]<<' ';
        if(dp2[i]>=n && !found) {
            found = i; 
            foundVal = dp2[i];
        }
    } 
    int zepsute = -1;
    for(int i=found-1; i>0; i--) {
//        cout<<dp[i]<<'\n';
        if(dp[i] == abs(n-foundVal)) {
            zepsute = i;
            break;
        }
    } 
    vector<int> xd;
    for(int i=found; i>0; i--) {
      if(i!=zepsute) xd.push_back(i);
    }
    cout<<xd.size()<<'\n';
    for(auto i: xd) cout<<i<<' ';
    

}