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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <vector>

using namespace std;

int getbitcnt(int a) {

	int sum = 0;
	int r = 0;
	int pow = 1;

	while (sum < a) {

		if ((a & pow) == pow) {
			sum += pow;
			r++;
		}

		pow *= 2;

	}

	return r;
}

int main() {

	vector<int> v;

	int n;
	cin >> n;

	int i = 1;
	int j = 0;

	while (true) {

		int x = getbitcnt(i);

		j += x;

		if (j>= n) break;

		i++;

	}
				   // i ostatni wyraz ciągu 
	int x = j - n; // tyle jest do zgaszenia

	vector<int> out;

	for (int k = i - 1; k >= 1; k--) {

		int zf = getbitcnt(k);

		if (zf<=x) {
			x -= zf;
			out.push_back(k);
		}

		if (x == 0) break;


	}

	int out_idx = 0;

	cout << i - out.size() << endl;

	for (int e = i; e >= 1; e--) {

		if (e == out[out_idx]) {
			
			if (out_idx + 1 == out.size()) continue;

			out_idx++;

			continue;

		}

		cout << e << " ";

	}

}