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
#include <bits/stdc++.h>
using namespace std;

int n, pom, ilosc=0, tab[125000], suma;
stack <int> S;
set <int> cursed;

int main()
{ios_base::sync_with_stdio(0);
 cin.tie(0);
 cout.tie(0);

 cin >> n;
 for (int i=1; i<=125000; i++){
    S.push(i); ilosc++;
    pom=i;
    while (pom){
        tab[i]+=(pom%2);
        pom/=2;
        }
    suma+=tab[i];
    if (suma>=n) break;
    }

 for (int i=S.top(); suma-n && i; i--)
    if (suma-tab[i]>=n){
        ilosc--;
        cursed.insert(i);
        suma-=tab[i];
        }

 cout <<ilosc<<endl;
 while (S.size()){
    if (!cursed.count(S.top())) cout <<S.top()<<" ";
    S.pop();
    }
 cout <<endl;
}
/*
3          2
           3 1

10         6
           7 5 4 3 2 1
*/