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
#include <bits/stdc++.h>

using namespace std;

template<typename A, typename B> ostream& operator<<(ostream &os, const pair<A, B> &p) { return os << '(' << p.first << ", " << p.second << ')'; }
template<typename T_container, typename T = typename enable_if<!is_same<T_container, string>::value, typename T_container::value_type>::type> ostream& operator<<(ostream &os, const T_container &v) { os << '{'; string sep; for (const T &x : v) os << sep << x, sep = ", "; return os << '}'; }
void dbg_out() { cerr << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cerr << ' ' << H; dbg_out(T...); }
#ifdef LOCAL
#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif

#define ar array
#define ll long long
#define ld long double
#define sza(x) ((int)x.size())
#define all(a) (a).begin(), (a).end()

const int MAX_N = 1e5 + 5;
const ll MOD = 1e9 + 7;
const ll INF = 1e9;
const ld EPS = 1e-9;

int onesinbin(int x){
    int counter =0;
    while(x){
        if(x%2==1) counter++;
        x/=2;
    }
    return counter;
}
void solve(int n){
    int i=1;
    int sum =0;
    vector<int> v;
    v.push_back(0);
    /*while(n>0){
        /*if(n-onesinbin(i)==1 && log2(i+1)==floor(log2(i+1))){
            n-=onesinbin(i);
            n-= onesinbin(i+1);
            v.push_back(i);
            v.push_back(i+1);
            length+=2;
            break;
        }
        else if(n-onesinbin(i)==1 && log2(i+1)!=floor(log2(i+1))){
            i++;
        }
        else if(n-onesinbin(i)<0){
            i++;
        }
        else if(n-onesinbin(i)>=0){
            n-=onesinbin(i);
            v.push_back(i);
            length++;
            i++;
        }
        /*else{
            i++;
        }
    }*/
    while(sum<n){
        sum+=onesinbin(i);
        v.push_back(i);
        i++;
        v[0]++;
    }
    i=v[0]-1;
    while(sum!=n){
        //cout << v[i] << onesinbin(i) << "\n";
        if(sum-onesinbin(v[i])>=n){
        sum-=onesinbin(v[i]);
        v[i]=0;
        v[0]--;
        }
        i--;
    }
    cout << v[0] << "\n";
    for(int i=v.size()-1; i>0; i--){
        if(v[i]!=0)cout<< v[i] << " ";
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int tc = 1;
    int n;
    /*for(int i=1; i<300; i++){
        if(log2(i)==floor(log2(i))){
            cout << "\n";
        }
        cout << onesinbin(i) << " ";
        if(onesinbin(i+1)<onesinbin(i)) cout << "  ";
    }*/
    //cout << "\n";
    // cin >> tc;
    for (int t = 1; t <= tc; t++) {
        cin >> n;
        solve(n);
    }
    return 0;
}