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
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
#include <cstdio>

using namespace std;

int main() {

    int n;

    scanf("%d", &n);

    int tab[n];
    tab[0] = 1;
    int toN = 1;

    int count = 1;

    for (int i = 1; i <= n; i++){

        if (toN < n){
            count++;
            toN += __builtin_popcount(i+1);
            tab[i] = i+1;
        }
        if (toN > n){
            if (toN - __builtin_popcount(i) == n){
                toN -= __builtin_popcount(i);
                tab[i-1] = i+1;
                count--;
            } else {
                if (toN - __builtin_popcount(i-1) == n){
                    toN -= __builtin_popcount(i-1);
                    tab[i-2] = i; tab[i-1] = i+1;
                    count--;
                } else {
                    if (toN - __builtin_popcount(i-2) == n){
                        toN -= __builtin_popcount(i-2);
                        tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                        count--;
                    } else {
                        if (toN - __builtin_popcount(i-3) == n) {
                            toN -= __builtin_popcount(i-3);
                            tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                            count--;
                        } else {
                            if (toN - __builtin_popcount(i-4) == n) {
                                toN -= __builtin_popcount(i-4);
                                tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                count--;
                            } else {
                                if (toN - __builtin_popcount(i-5) == n) {
                                    toN -= __builtin_popcount(i-5);
                                    tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                    count--;
                                } else {
                                    if (toN - __builtin_popcount(i-6) == n) {
                                        toN -= __builtin_popcount(i-6);
                                        tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                        count--;
                                    } else {
                                        if (toN - __builtin_popcount(i-7) == n) {
                                            toN -= __builtin_popcount(i-7);
                                            tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                            count--;
                                        } else {
                                            if (toN - __builtin_popcount(i-8) == n) {
                                                toN -= __builtin_popcount(i-8);
                                                tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                count--;
                                            } else {
                                                if (toN - __builtin_popcount(i-9) == n) {
                                                    toN -= __builtin_popcount(i-9);
                                                    tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                    count--;
                                                } else {
                                                    if (toN - __builtin_popcount(i-10) == n) {
                                                        toN -= __builtin_popcount(i-10);
                                                        tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                        count--;
                                                    } else {
                                                        if (toN - __builtin_popcount(i-11) == n) {
                                                            toN -= __builtin_popcount(i-11);
                                                            tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                            count--;
                                                        } else {
                                                            if (toN - __builtin_popcount(i-12) == n) {
                                                                toN -= __builtin_popcount(i-12);
                                                                tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                count--;
                                                            } else {
                                                                if (toN - __builtin_popcount(i-13) == n) {
                                                                    toN -= __builtin_popcount(i-13);
                                                                    tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                    count--;
                                                                } else {
                                                                    if (toN - __builtin_popcount(i-14) == n) {
                                                                        toN -= __builtin_popcount(i-14);
                                                                        tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                        count--;
                                                                    } else {
                                                                        if (toN - __builtin_popcount(i-15) == n) {
                                                                            toN -= __builtin_popcount(i-15);
                                                                            tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                            count--;
                                                                        } else {
                                                                            if (toN - __builtin_popcount(i-16) == n) {
                                                                                toN -= __builtin_popcount(i-16);
                                                                                tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                count--;
                                                                            } else {
                                                                                if (toN - __builtin_popcount(i-17) == n) {
                                                                                    toN -= __builtin_popcount(i-17);
                                                                                    tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                    count--;
                                                                                } else {
                                                                                    if (toN - __builtin_popcount(i-18) == n) {
                                                                                        toN -= __builtin_popcount(i-18);
                                                                                        tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                        count--;
                                                                                    } else {
                                                                                        if (toN - __builtin_popcount(i-19) == n) {
                                                                                            toN -= __builtin_popcount(i-19);
                                                                                            tab[i-20] = i-18; tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                            count--;
                                                                                        } else {
                                                                                            if (toN - __builtin_popcount(i-20) == n) {
                                                                                                toN -= __builtin_popcount(i-20);
                                                                                                tab[i-21] = i-19; tab[i-20] = i-18; tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                                count--;
                                                                                            } else {
                                                                                                if (toN - __builtin_popcount(i-21) == n) {
                                                                                                    toN -= __builtin_popcount(i-21);
                                                                                                    tab[i-22] = i-20; tab[i-21] = i-19; tab[i-20] = i-18; tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                                    count--;
                                                                                                } else {
                                                                                                    if (toN - __builtin_popcount(i-22) == n) {
                                                                                                        toN -= __builtin_popcount(i-22);
                                                                                                        tab[i-23] = i-21; tab[i-22] = i-20; tab[i-21] = i-19; tab[i-20] = i-18; tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                                        count--;
                                                                                                    } else {
                                                                                                        if (toN - __builtin_popcount(i-23) == n) {
                                                                                                            toN -= __builtin_popcount(i-23);
                                                                                                            tab[i-24] = i-22; tab[i-23] = i-21; tab[i-22] = i-20; tab[i-21] = i-19; tab[i-20] = i-18; tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                                            count--;
                                                                                                        } else {
                                                                                                            if (toN - __builtin_popcount(i-24) == n) {
                                                                                                                toN -= __builtin_popcount(i-24);
                                                                                                                tab[i-25] = i-23; tab[i-24] = i-22; tab[i-23] = i-21; tab[i-22] = i-20; tab[i-21] = i-19; tab[i-20] = i-18; tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                                                count--;
                                                                                                            } else {
                                                                                                                if (toN - __builtin_popcount(i-25) == n) {
                                                                                                                    toN -= __builtin_popcount(i-25);
                                                                                                                    tab[i-26] = i-24; tab[i-25] = i-23; tab[i-24] = i-22; tab[i-23] = i-21; tab[i-22] = i-20; tab[i-21] = i-19; tab[i-20] = i-18; tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                                                    count--;
                                                                                                                } else {
                                                                                                                    if (toN - __builtin_popcount(i-26) == n) {
                                                                                                                        toN -= __builtin_popcount(i-26);
                                                                                                                        tab[i-27] = i-25; tab[i-26] = i-24; tab[i-25] = i-23; tab[i-24] = i-22; tab[i-23] = i-21; tab[i-22] = i-20; tab[i-21] = i-19; tab[i-20] = i-18; tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                                                        count--;
                                                                                                                    } else {
                                                                                                                        if (toN - __builtin_popcount(i-27) == n) {
                                                                                                                            toN -= __builtin_popcount(i-27);
                                                                                                                            tab[i-28] = i-26; tab[i-27] = i-25; tab[i-26] = i-24; tab[i-25] = i-23; tab[i-24] = i-22; tab[i-23] = i-21; tab[i-22] = i-20; tab[i-21] = i-19; tab[i-20] = i-18; tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                                                            count--;
                                                                                                                        } else {
                                                                                                                            if (toN - __builtin_popcount(i-28) == n) {
                                                                                                                                toN -= __builtin_popcount(i-28);
                                                                                                                                tab[i-29] = i-27; tab[i-28] = i-26; tab[i-27] = i-25; tab[i-26] = i-24; tab[i-25] = i-23; tab[i-24] = i-22; tab[i-23] = i-21; tab[i-22] = i-20; tab[i-21] = i-19; tab[i-20] = i-18; tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                                                                count--;
                                                                                                                            } else {
                                                                                                                                if (toN - __builtin_popcount(i-29) == n) {
                                                                                                                                    toN -= __builtin_popcount(i-29);
                                                                                                                                    tab[i-30] = i-28; tab[i-29] = i-27; tab[i-28] = i-26; tab[i-27] = i-25; tab[i-26] = i-24; tab[i-25] = i-23; tab[i-24] = i-22; tab[i-23] = i-21; tab[i-22] = i-20; tab[i-21] = i-19; tab[i-20] = i-18; tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                                                                    count--;
                                                                                                                                } else {
                                                                                                                                    if (toN - __builtin_popcount(i-30) == n) {
                                                                                                                                        toN -= __builtin_popcount(i-30);
                                                                                                                                        tab[i-31] = i-29; tab[i-30] = i-28; tab[i-29] = i-27; tab[i-28] = i-26; tab[i-27] = i-25; tab[i-26] = i-24; tab[i-25] = i-23; tab[i-24] = i-22; tab[i-23] = i-21; tab[i-22] = i-20; tab[i-21] = i-19; tab[i-20] = i-18; tab[i-19] = i-17; tab[i-18] = i-16; tab[i-17] = i-15; tab[i-16] = i-14; tab[i-15] = i-13; tab[i-14] = i-12; tab[i-13] = i-11; tab[i-12] = i-10; tab[i-11] = i-9; tab[i-10] = i-8; tab[i-9] = i-7; tab[i-8] = i-6; tab[i-7] = i-5; tab[i-6] = i-4; tab[i-5] = i-3; tab[i-4] = i-2; tab[i-3] = i-1; tab[i-2] = i; tab[i-1] = i+1;
                                                                                                                                        count--;
                                                                                                                                    } else {
                                                                                                                                        if (toN -
                                                                                                                                            __builtin_popcount(
                                                                                                                                                    i) +
                                                                                                                                            __builtin_popcount(
                                                                                                                                                    i +
                                                                                                                                                    2) ==
                                                                                                                                            n) {
                                                                                                                                            toN -= __builtin_popcount(
                                                                                                                                                    i);
                                                                                                                                            toN += __builtin_popcount(
                                                                                                                                                    i +
                                                                                                                                                    2);
                                                                                                                                            tab[i -
                                                                                                                                                1] =
                                                                                                                                                    i +
                                                                                                                                                    1;
                                                                                                                                            tab[i] =
                                                                                                                                                    i +
                                                                                                                                                    2;
                                                                                                                                        } else {
                                                                                                                                            if (toN -
                                                                                                                                                __builtin_popcount(
                                                                                                                                                        i +
                                                                                                                                                        1) +
                                                                                                                                                __builtin_popcount(
                                                                                                                                                        i +
                                                                                                                                                        2) ==
                                                                                                                                                n) {
                                                                                                                                                toN -= __builtin_popcount(
                                                                                                                                                        i +
                                                                                                                                                        1);
                                                                                                                                                toN += __builtin_popcount(
                                                                                                                                                        i +
                                                                                                                                                        2);
                                                                                                                                                tab[i] =
                                                                                                                                                        i +
                                                                                                                                                        2;
                                                                                                                                            } else {
                                                                                                                                                if (toN -
                                                                                                                                                    __builtin_popcount(
                                                                                                                                                            i +
                                                                                                                                                            1) +
                                                                                                                                                    __builtin_popcount(
                                                                                                                                                            i +
                                                                                                                                                            3) ==
                                                                                                                                                    n) {
                                                                                                                                                    toN -= __builtin_popcount(
                                                                                                                                                            i +
                                                                                                                                                            1);
                                                                                                                                                    toN += __builtin_popcount(
                                                                                                                                                            i +
                                                                                                                                                            3);
                                                                                                                                                    tab[i] =
                                                                                                                                                            i +
                                                                                                                                                            3;
                                                                                                                                                }
                                                                                                                                            }
                                                                                                                                        }
                                                                                                                                    }
                                                                                                                                }
                                                                                                                            }
                                                                                                                        }
                                                                                                                    }
                                                                                                                }
                                                                                                            }
                                                                                                        }
                                                                                                    }
                                                                                                }
                                                                                            }
                                                                                        }
                                                                                    }
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

        }
        if (toN == n){
            break;
        }
    }

    printf("%d\n", count);

    for (int i = count-1; i >= 0; i--){
        printf("%d ", tab[i]);
    }

    return 0;
}