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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include<bits/stdc++.h>

using namespace std;

int n, k;
int aktsuma;
int najwieksza;
//vector<bool> potegi2;
vector<int> zapbity(1);

int ilzapbit(int liczba)
{
    int odp = 0;
    for(;liczba;liczba/=2)
        odp += liczba % 2;

    return odp;
}

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

//    for(int i=1;i<1e7;i*=2)
//        potegi2.push_back(i);
//
//    int pom=0;
//    for(;potegi2[pom] <= n;pom++);
//    k = najwieksza = potegi2[pom]-1;
//    aktsuma = potegi2[pom];
//
//    for(int l = najwieksza;l>0;l--)
//    {
//        pom = ilzapbit(l);
//        if(aktsuma)
//    }

    cin>>n;

    for(k=1;aktsuma < n;k++)
    {
        zapbity.push_back(ilzapbit(k));
        aktsuma += ilzapbit(k);
    }

    for(int l= --k;aktsuma != n;l--)
    {
        if(aktsuma - zapbity[l] >= n)
        {
            aktsuma -= zapbity[l];
            zapbity[l] = -1;
            k--;
        }
    }

    cout<<k<<'\n';
    for(int i = zapbity.size()-1;i > 0;i--)
        if(zapbity[i] != -1)
            cout<<i<<' ';

    return 0;
}