111111
 100009
 10011
 1000000
 8
 10201
 102030
 908172
 123456
 415
 900000
 21
 909090
 314159
 999999
 909823
 987654
 1453
 1435
 98
 10
 2
 1

1
111111
 9
100001 1 1 1 1 1 1 1 1
 1
10011
 1
1000000
 8
1 1 1 1 1 1 1 1
 2
10101 100
 3
101010 1010 10
 9
101111 101011 101010 101010 101010 101010 101010 101000 100000
 6
111111 11111 1111 111 11 1
 5
111 101 101 101 1
 9
100000 100000 100000 100000 100000 100000 100000 100000 100000
 2
11 10
 9
101010 101010 101010 101010 101010 101010 101010 101010 101010
 9
111111 101011 101011 1011 11 1 1 1 1
 9
111111 111111 111111 111111 111111 111111 111111 111111 111111
 9
101111 101111 101101 101100 101100 101100 101100 101100 101000
 9
111111 111111 111111 111111 111110 111100 111000 110000 100000
 5
1111 111 111 110 10
 5
1111 111 111 101 1
 9
11 11 11 11 11 11 11 11 10
 1
10
 2
1 1
 1
1

#include <bits/stdc++.h>
using namespace std;
void binary(string &s, unsigned long long int number) {
  stringstream ss;
  unsigned long long int remainder;
  if (number <= 1) {
    ss << number;
    string t;
    ss >> t;
    s += t;
    return;
  }
  remainder = number % 2;
  binary(s, number >> 1);
  ss << remainder;
  string t;
  ss >> t;
  s += t;
}
int main() {
  vector<unsigned long long int> nums;
  unsigned long long int n, bin = 0, MT = (1 << 29), cual = 0;
  cin >> n;
  for (unsigned long long int cont = 0; bin < n; cont++) {
    string s;
    binary(s, cont);
    stringstream st;
    st << s;
    st >> bin;
    if (bin <= n) nums.push_back(bin);
  }
  vector<vector<unsigned long long int> > gen(nums.size());
  for (unsigned long long int cont2 = 0; cont2 < nums.size() - 1; cont2++) {
    unsigned long long int sum = 0;
    bool salir = false;
    for (unsigned long long int cont = nums.size() - (1 + cont2);
         cont >= 0 && !salir; cont--) {
      bool cambiar = false;
      while (!cambiar) {
        if ((sum + nums[cont]) <= n) {
          sum += nums[cont];
          gen[cont2].push_back(nums[cont]);
        } else
          cambiar = true;
      }
      if (sum == n) salir = true;
    }
    if (gen[cont2].size() < MT) {
      MT = gen[cont2].size();
      cual = cont2;
    }
  }
  cout << MT << endl;
  sort(gen[cual].begin(), gen[cual].end());
  for (unsigned long long int cont = 0; cont < gen[cual].size(); cont++)
    if (cont == 0)
      cout << gen[cual][0];
    else
      cout << " " << gen[cual][cont];
  cout << endl;
  return 0;
}
