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
//GRT_2018
#include <bits/stdc++.h>
#define PB push_back
#define ST first
#define ND second
//mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());

using namespace std;

using ll = long long;
using pi = pair<int,int>;
using vi = vector<int>;

const int nax = 1e6 + 10;
int n;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	vi sum = {0};
	for (int i = 1; ; ++i) {
		sum.PB(sum.back() + __builtin_popcount(i));
		if (sum.back() >= n) {
			break;
		}
	}
	vi ans = {(int)sum.size() - 1};
	n -= __builtin_popcount(ans.back());
	sum.pop_back();
	while ((int)sum.size() > 1) {
		if (sum[(int)sum.size() - 2] < n) {
			ans.PB((int)sum.size() - 1);
			n -= __builtin_popcount(ans.back());
		}
		sum.pop_back();
	}
	cout << (int)ans.size() << "\n";
	for (int x : ans) cout << x << " ";
}