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
//Wiktor Kotala
#include <bits/stdc++.h>
#define f first
#define s second
#define add push_back
using namespace std;
typedef long long ll;
typedef pair<int,int> pint;
typedef pair<ll,ll> pll;
vector<int> V;
queue<int> odp;

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

    cin >> n;

    int zapalonych = 0;
    unsigned int i=0;
    while(zapalonych < n){
        zapalonych += __builtin_popcount(i);\
        V.add(zapalonych);
        i++;
    }


    vector<int>::iterator koniec = V.end();
    while(n){
        koniec = lower_bound(V.begin(), V.end(), n);
        i = koniec-V.begin();
        odp.push(i);
        n -= __builtin_popcount(i);
    }

    cout << odp.size() << '\n';
    while(odp.size()){
        cout << odp.front() << ' ';
        odp.pop();
    }

	return 0;
}