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
#include <iostream>
#include <vector>
using namespace std;
int tab[1000003];
vector<int>v;
int b(int x,int n){
    int p=1;int kon=n;
    while(kon-p>0){
        int mid=(kon+p)/2;
        if(tab[mid]<x){
            p=mid+1;
        }else{
            kon=mid;}
    }
    return p;
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    int y=0;
    for(int i=1;tab[i-1]<=n;i++){
        int j=i;
        int w=0;
            while(j>0){if(j%2==1){w++;}j/=2;}
        tab[i]=tab[i-1]+w;
        y++;
    }
    while(n>0){
        v.push_back(b(n,y));
        n-=(tab[v.back()]-tab[v.back()-1]);
        y--;
    }
    cout<<v.size()<<"\n";
    for(int i=0;i<v.size();i++){
        cout<<v[i]<<" ";
    }
    return 0;
}