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

typedef long long int lli;

using namespace std;

#define MAX4 10010
#define MAX5 100010
#define MAX6 1000010

template <typename T >
void dbg(T last)
{
  cout << last << "\n";
}

template <typename T, typename ...args>
void dbg(T current, args ...next)
{
  cout << current << ' ';
  dbg(next...);
}

//-----------------------------------------------------------------------------------------------//

int tab[MAX6];

void fin(int n, int k, vector<int> &ans)
{
  if (n <= 1)
  {
    ans.push_back(1);
    return;
  }
  int l=0,r=k,s,x=0;

  while (l<=r)
  {
    s=(l+r)/2;
    if(tab[s] >= n)
    {
      x=s;
      r=s-1;
    }
    else
    {
      l=s+1;
    }
  }

  ans.push_back(x);
  fin(n-__builtin_popcount(x),k,ans);
}
void solve()
{
  int n;
  cin >> n;

  int k = 1;

  while (true)
  {
    tab[k] = tab[k-1] + __builtin_popcount(k);
    if (tab[k] > n)
    {
      break;
    }
    k++;
  }

  vector<int> ans;

  fin(n, k, ans);

  cout << ans.size() << "\n";

  for (int x : ans)
  {
    cout << x << " ";
  }
}

int main()
{
  std::ios::sync_with_stdio(false);

  solve();

  return 0;
}