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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;

public class ProblemB {

	static Scanner sc = new Scanner(System.in);
	static PrintWriter pw = new PrintWriter(System.out);
	static final int max = Integer.MAX_VALUE;
	static int n, memo[], best[];
	static ArrayList<Integer> a, quasi;

	static void generate() {
		for (int i = 1; i <= 64; i++) {
			quasi.add(Integer.parseInt(Integer.toBinaryString(i)));
		}
	}

	static void print(int x) {
		// System.out.println(x);
		if (x == 0)
			return;
		a.add(best[x]);
		print(x - best[x]);
	}

	public static void main(String[] args) throws IOException {
		n = sc.nextInt();
		a = new ArrayList<>();
		quasi = new ArrayList<>();
		memo = new int[n + 1];
		best = new int[n + 1];
		for (int i = 1; i < 10&&i<n+1; i++) {
			memo[i] = i;
			best[i] = 1;
		}
		generate();

		for (int i = 10; i <= n; i++) {
			int res = max, chosen = -1;
			for (int j = 0; j < quasi.size(); j++) {
				int y = quasi.get(j);
				if (y > i)
					break;
				if (memo[i - y] < res) {
					res = memo[i - y];
					chosen = y;
				}
			}
			memo[i] = res + 1;
			best[i] = chosen;
		}
		pw.println(memo[n]);
		print(n);
		for (int i = 0; i < a.size(); i++) {
			pw.print(a.get(i) + " ");
		}
		pw.flush();
	}

	static class Scanner {
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream s) {
			br = new BufferedReader(new InputStreamReader(s));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public long nextLong() throws IOException {
			return Long.parseLong(next());
		}
	}
}