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
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;

    vector<int> DP(n + 1);
    int k = 1;

    for (int i = 1; k <= n; ++i)
    {
        for (int j = k; j <= n && j < k + __builtin_popcount(i); ++j) DP[j] = i;
        k += __builtin_popcount(i);
    }

    vector<int> ans;
    int cnt = n;
    while (cnt)
    {
        ans.push_back(DP[cnt]);
        cnt -= __builtin_popcount(DP[cnt]);
    }

    cout << ans.size() << "\n";
    for (int e : ans) cout << e << " ";
}