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

vector<int> potegi;
int ile_bitow[1000*1000+7];
bool czy_uzyc[1000*1000+7];

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n, k=0;
	cin >> n;
	potegi.push_back(1);
	while(potegi[potegi.size()-1]<1000*1000){
		potegi.push_back(potegi[potegi.size()-1]*2);
	}
	
	int i=0, j=0;
	while(n>0){
		++i;
		if(i==potegi[j]){
			++j;
			ile_bitow[i] = 1;
		}
		else{
			ile_bitow[i] = ile_bitow[i-potegi[j-1]]+1;
		}
		czy_uzyc[i] = true;
		++k;
		
		if(ile_bitow[i]>n){
			n = ile_bitow[i]-n;
			for(int m=i-1; m>0; --m){
				if(ile_bitow[m] <= n){
					n-=ile_bitow[m];
					czy_uzyc[m] = false;
					--k;
				}
				if(n==0) break;
			}
			break;
		}
		n-=ile_bitow[i];
	}
	
	cout << k << '\n';
	for(int m=i; i>0; --i){
		if(czy_uzyc[i]) cout << i << ' ';
	}
	return 0;
}