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;
priority_queue<int> make(pair<int, string> table[], int size,
                         priority_queue<int> fTable, int ttt) {
  int j = 0;
  int start = 0, end = 1;
  for (int i = 1; i < size + 1; i++) {
    if (i == 1) {
      table[j] = make_pair(i, "0");
      j++;
      table[j] = make_pair(i, "1");
      j++;
    } else {
      for (int k = start; k <= end; k++) {
        table[j] = make_pair(i, table[k].second + "0");
        j++;
        table[j] = make_pair(i, table[k].second + "1");
        j++;
      }
      start = end + 1;
      end = pow(2, i) + end;
    }
  }
  for (int i = 0; i < ttt; i++) {
    fTable.push(atoi(table[i].second.c_str()));
  }
  return fTable;
}
void solution(int a) { string num = to_string(a); }
int main() {
  int n;
  cin >> n;
  int check = n;
  string temp = to_string(n);
  int size = temp.size();
  int ttt = 0;
  for (int i = 1; i <= size; i++) {
    ttt += pow(2, i);
  }
  pair<int, string> table[ttt];
  int tSize = pow(2, size);
  priority_queue<int> fTable;
  fTable = make(table, size, fTable, ttt);
  int k = 0, ans[n], h = 0;
  for (int i = 0; i < n; i++) {
    ans[i] = -1;
  }
  for (int i = 0; !fTable.empty(); i++) {
    if (n == 0) {
      break;
    } else {
      int adad = fTable.top();
      if (n - adad >= 0) {
        n -= adad;
        k++;
        ans[h] = adad;
        h++;
      } else {
        fTable.pop();
      }
    }
  }
  cout << k << endl;
  for (int i = 0; ans[i] != -1 && i < check; i++) {
    cout << ans[i] << " ";
  }
  return 0;
}
