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;
const long long mod = 1e9 + 7;
struct hash_pair {
  template <class T1, class T2>
  size_t operator()(const pair<T1, T2>& p) const {
    auto hash1 = hash<T1>{}(p.first);
    auto hash2 = hash<T2>{}(p.second);
    return hash1 ^ hash2;
  }
};
unordered_map<pair<int, int>, int, hash_pair> map_with_pair{};
priority_queue<int, vector<int>, greater<int>> pq_desc;
int n;
multiset<int> dp[(int)1e6 + 1];
void set_value(set<int, greater<int>>& nums, int nn, int id) {
  if (id < 0) return;
  int num = pow(10, id);
  nums.insert(nn);
  set_value(nums, nn, id - 1);
  nums.insert(nn + num);
  set_value(nums, nn + num, id - 1);
}
multiset<int> solve(int num, multiset<int> ans) {
  if (num == 0) return ans;
  int x = num;
  int sub_1 = 0;
  set<int, std::greater<int>> nums;
  int cnt = 0;
  while (x != 0) {
    x /= 10;
    cnt++;
  }
  int nn = pow(10, cnt - 1);
  nums.insert(nn);
  set_value(nums, nn, cnt - 2);
  int ans_len = INT_MAX;
  multiset<int> new_ans;
  for (auto it = nums.begin(); it != nums.end(); it++) {
    multiset<int> s(ans);
    s.insert(*it);
    if (num - (*it) >= 0) {
      int mul = num / (*it);
      for (int x = 1; 1 < mul ? x < mul : x > mul; 1 < mul ? x += 1 : x -= 1)
        s.insert(*it);
      s = solve(num - ((*it) * mul), s);
      if (s.size() < ans_len) {
        ans_len = s.size();
        new_ans = s;
      }
    }
  }
  return new_ans;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  multiset<int> ans;
  ans = solve(n, ans);
  cout << ans.size() << "\n";
  for (auto it = ans.begin(); it != ans.end(); it++) {
    cout << *it << " ";
  }
  return 0;
}
