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.*;
import java.util.*;

public class Stack3 {

    static class Reader {
        final private int BUFFER_SIZE = 1 << 16;
        private DataInputStream din;
        private byte[] buffer;
        private int bufferPointer, bytesRead;

        public Reader() {
            din = new DataInputStream(System.in);
            buffer = new byte[BUFFER_SIZE];
            bufferPointer = bytesRead = 0;
        }

        public Reader(String file_name) throws IOException {
            din = new DataInputStream(new FileInputStream(file_name));
            buffer = new byte[BUFFER_SIZE];
            bufferPointer = bytesRead = 0;
        }

        public String readLine() throws IOException {
            byte[] buf = new byte[64]; // line length
            int cnt = 0, c;
            while ((c = read()) != -1) {
                if (c == '\n')
                    break;
                buf[cnt++] = (byte) c;
            }
            return new String(buf, 0, cnt);
        }

        public int nextInt() throws IOException {
            int ret = 0;
            byte c = read();
            while (c <= ' ')
                c = read();
            boolean neg = (c == '-');
            if (neg)
                c = read();
            do {
                ret = ret * 10 + c - '0';
            } while ((c = read()) >= '0' && c <= '9');
            if (neg)
                return -ret;
            return ret;
        }

        public long nextLong() throws IOException {
            long ret = 0;
            byte c = read();
            while (c <= ' ')
                c = read();
            boolean neg = (c == '-');
            if (neg)
                c = read();
            do {
                ret = ret * 10 + c - '0';
            }
            while ((c = read()) >= '0' && c <= '9');
            if (neg)
                return -ret;
            return ret;
        }

        public double nextDouble() throws IOException {
            double ret = 0, div = 1;
            byte c = read();
            while (c <= ' ')
                c = read();
            boolean neg = (c == '-');
            if (neg)
                c = read();
            do {
                ret = ret * 10 + c - '0';
            }
            while ((c = read()) >= '0' && c <= '9');
            if (c == '.') {
                while ((c = read()) >= '0' && c <= '9') {
                    ret += (c - '0') / (div *= 10);
                }
            }
            if (neg)
                return -ret;
            return ret;
        }

        private void fillBuffer() throws IOException {
            bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE);
            if (bytesRead == -1)
                buffer[0] = -1;
        }

        private byte read() throws IOException {
            if (bufferPointer == bytesRead)
                fillBuffer();
            return buffer[bufferPointer++];
        }

        public void close() throws IOException {
            if (din == null)
                return;
            din.close();
        }
    }

    static Reader sc = new Reader();
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException {
        /*
         * For integer input: int n=inputInt();
         * For long input: long n=inputLong();
         * For double input: double n=inputDouble();
         * For String input: String s=inputString();
         * Logic goes here
         * For printing without space: print(a+""); where a is a variable of any datatype
         * For printing with space: printSp(a+""); where a is a variable of any datatype
         * For printing with new line: println(a+""); where a is a variable of any datatype
         */
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        int cop=n;
        int maxd=0;
        while (cop!=0){
            int d=cop%10;
            maxd=Math.max(maxd,d);
            cop/=10;
        }
        List<Integer> list=new ArrayList<>();
        for(int i=1;i<=maxd;i++){
            String num=n+"";
            StringBuilder ans1= new StringBuilder();
            for(int j=0;j<num.length();j++){
                int num1=(num.charAt(j)-'0');
                if(num1>0){
                    ans1.append("1");
                }else {
                    ans1.append("0");
                }
            }
            int y=Integer.parseInt(ans1.toString());
            list.add(y);
            n=n-y;

        }
        System.out.println(maxd);
        for(Integer integer:list){
            System.out.print(integer+" ");
        }




        bw.flush();
        bw.close();


    }

    public static void getAns(int n, List<Integer> list, int c) {
        if (n == 0) {
            return;
        }

        int size = (int) Math.ceil(Math.log(n) / Math.log(10));
        if (n % 10 == 0) {
            size = size + 1;
        }
        StringBuilder num1 = new StringBuilder();
        for (int i = 1; i <= size; i++) {
            num1.append("1");
        }
        StringBuilder num2 = new StringBuilder();
        num2.append("1");
        for (int i = 2; i <= size; i++) {
            num2.append("0");
        }
        String num3 = (int) 1e7 + "";
        if (num1.length() > 1)
            num3 = num1.substring(1);
        int n1 = (int) 1e7;
        if (num1.length() >= 1) {

            n1 = Integer.parseInt(num1.toString());


        }

        int n2 = Integer.parseInt(num2.toString());
        int n3 = Integer.parseInt(num3);
        if (n - n1 >= 0) {
            list.add(n1);
            getAns(n - n1, list, c);
        } else if (n - n2 >= 0) {
            list.add(n2);
            getAns(n - n2, list, c);
        } else if (n - n3 >= 0) {
            list.add(n3);
            getAns(n - n3, list, c);
        } else {
            int num = 1;
            list.add(1);
            getAns(n - 1, list, c + 1);
        }
    }

    public static void dfs1(List<List<Integer>> g, boolean[] visited, Stack<Integer> stack, int num) {
        visited[num] = true;
        for (Integer integer : g.get(num)) {
            if (!visited[integer]) {
                dfs1(g, visited, stack, integer);
            }
        }
        stack.push(num);
    }

    public static void dfs2(List<List<Integer>> g, boolean[] visited, List<Integer> list, int num, int c, int[] raj) {
        visited[num] = true;

        for (Integer integer : g.get(num)) {
            if (!visited[integer]) {
                dfs2(g, visited, list, integer, c, raj);
            }
        }
        raj[num] = c;
        list.add(num);

    }

    public static int inputInt() throws IOException {
        return sc.nextInt();
    }

    public static long inputLong() throws IOException {
        return sc.nextLong();
    }

    public static double inputDouble() throws IOException {
        return sc.nextDouble();
    }

    public static String inputString() throws IOException {
        return sc.readLine();
    }

    public static void print(String a) throws IOException {
        bw.write(a);
    }

    public static void printSp(String a) throws IOException {
        bw.write(a + " ");
    }

    public static void println(String a) throws IOException {
        bw.write(a + "\n");
    }


    public static long getAns(int[] ar, int c, long[][] dp, int i, int sign) {
        if (i < 0) {
            return 1;
        }

        if (c <= 0) {
            return 1;
        }

        dp[i][c] = Math.max(dp[i][c], Math.max(ar[i] * getAns(ar, c - 1, dp, i - 1, sign), getAns(ar, c, dp, i - 1, 1)));
        return dp[i][c];
    }


    public static long power(long a, long b, long c) {
        long ans = 1;
        while (b != 0) {
            if (b % 2 == 1) {
                ans = ans * a;
                ans %= c;
            }
            a = a * a;
            a %= c;
            b /= 2;
        }
        return ans;
    }

    public static long power1(long a, long b, long c) {
        long ans = 1;
        while (b != 0) {
            if (b % 2 == 1) {
                ans = multiply(ans, a, c);
            }
            a = multiply(a, a, c);
            b /= 2;

        }
        return ans;

    }

    public static long multiply(long a, long b, long c) {
        long res = 0;
        a %= c;
        while (b > 0) {
            if (b % 2 == 1) {
                res = (res + a) % c;
            }
            a = (a + a) % c;
            b /= 2;
        }

        return res % c;

    }

    public static long totient(long n) {
        long result = n;
        for (long i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                //sum=sum+2*i;
                while (n % i == 0) {
                    n /= i;
                    // sum=sum+n;
                }
                result -= result / i;

            }
        }
        if (n > 1) {
            result -= result / n;

        }
        return result;
    }


    public static long gcd(long a, long b) {
        if (b == 0) {
            return a;
        } else {
            return gcd(b, a % b);
        }
    }

    public int sumOfFlooredPairs(int[] nums) {
        // long sum=0;
        long mod = (long) (1e9 + 7);
        Arrays.sort(nums);
        long[] numerator = new long[nums.length];
        long[] denominator = new long[nums.length];

        long[] numerator1 = new long[nums.length];
        long[] denominator1 = new long[nums.length];

        long num = 1;
        long den = nums[0];
        numerator[0] = 1;
        denominator[0] = den;
        long num1 = 1;
        long den1 = nums[nums.length - 1];
        numerator1[nums.length - 1] = 1;
        denominator1[nums.length - 1] = den1;


        for (int i = 1; i < nums.length; i++) {

            long gcd1 = gcd(denominator[i - 1], nums[i]);
            long lcm = (denominator[i - 1] * nums[i]) / gcd1;
            long n1 = lcm / denominator[i - 1] * numerator[i - 1] + lcm / nums[i];
            numerator[i] = n1;
            denominator[i] = lcm;

            long gcd2 = gcd(denominator1[nums.length - i], nums[nums.length - 1 - i]);
            long lcm1 = (denominator1[nums.length - i] * nums[nums.length - 1 - i]) / gcd2;
            long n2 = lcm1 / denominator1[nums.length - i] * numerator1[nums.length - i] + lcm1 / nums[nums.length - 1 - i];
            numerator1[nums.length - 1 - i] = n2;
            denominator1[nums.length - 1 - i] = lcm1;




           /* prefix[i]=sum;
            sum12+=1d/nums[nums.length-1-i];
            prefix2[nums.length-1-i]=sum12;*/

        }
        /*System.out.println(Arrays.toString(numerator));
         System.out.println(Arrays.toString(denominator));*/
        int sum2 = 0;
        for (int i = 0; i < nums.length; i++) {
            //float d1=(float)(numerator[i]/(double)denominator[i]);
            sum2 += (int) (Math.floor((numerator[i] * nums[i]) / (double) denominator[i]));
            sum2 %= mod;
            if (i + 1 < nums.length) {
                // float d2=(float)(numerator1[i+1]/(double)denominator1[i+1]);
                sum2 += (int) (Math.floor((numerator1[i + 1] * nums[i]) / (double) denominator1[i + 1]));
                sum2 %= mod;
            }
        }
        return sum2;


    }

    public static boolean[] primes(int n) {
        boolean[] p = new boolean[n + 1];
        p[0] = false;
        p[1] = false;
        for (int i = 2; i <= n; i++) {
            p[i] = true;
        }

        for (int i = 2; i * i <= n; i++) {
            if (p[i]) {
                for (int j = i * i; j <= n; j += i) {
                    p[j] = false;
                }
            }

        }
        return p;
    }

}