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

public class Main {

//    static Node root;
//
//    public static Node insert(Node root, int data) {
//        if(root == null) {
//            root = new Node(data);
//            return root;
//        }
//        Queue<Node> q = new LinkedList<>();
//        q.add(root);
//        while (!q.isEmpty()) {
//            Node temp = q.poll();
//            if(temp.left != null) {
//                q.add(temp.left);
//            } else {
//                temp.left = new Node(data);
//                return root;
//            }
//            if(temp.right != null) {
//                q.add(temp.right);
//            } else {
//                temp.right  = new Node(data);
//                return root;
//            }
//        }
//        return root;
//    }
//
//    public static void inorder(Node root) {
//        if(root != null) {
//            inorder(root.left);
//            System.out.println(root.data);
//            inorder(root.right);
//        }
//
//    }
//
//    public static Node delete(Node root, int val) {
//        if(root == null) return null;
//        if(root.left == null && root.right == null) {
//            if(root.data == val) {
//                root = null;
//                return root;
//            } else {
//                return root;
//            }
//        }
//        Node keyNode = null;
//        Node bottom = null;
//        Node temp = null;
//        Queue<Node> q = new LinkedList<>();
//        q.add(root);
//        while (!q.isEmpty()) {
//            temp = q.poll();
//            if(temp.data == val) {
//                keyNode = temp;
//            }
//            if(temp.left != null) {
//                q.add(temp.left);
//            }
//            if(temp.right != null) {
//                q.add(temp.right);
//            }
//        }
//        bottom = temp;
//        if(keyNode == null) {
//            return root;
//        }
//        q.clear();
//        q.add(root);
//        while (!q.isEmpty()) {
//            temp = q.poll();
//            if(temp == keyNode) {
//                keyNode.data = bottom.data;
//            }
//            if(temp.left != null) {
//                if(temp.left == bottom) {
//                    temp.left = null;
//                } else q.add(temp.left);
//            }
//            if(temp.right != null) {
//                if(temp.right == bottom) {
//                    temp.right = null;
//                } else q.add(temp.right);
//            }
//        }
//        return root;
//    }

    private static Scanner sc = new Scanner(System.in);

    static long modPow(long a, long b, long mod) {
        long ans = 1;
        while (b > 0) {
            if(b % 2 != 0) {
                ans *= a;
                ans %= mod;
            }
            b /= 2;
            a = ((a%mod)*(a%mod)) % mod;
        }
        return ans;
    }

    public static long ncr(long n, long r) {
        long num = 1, den = 1;
        for (int i = 0; i < r; ++i) {
            num = (num*(n-i)) % 998244353;
            den = (den * (i+1)) % 998244353;
        }
        return (num * modPow(den, 998244351, 998244353)) % 998244353;

    }

    public static void main(String[] args) {
        StringBuffer s = new StringBuffer(sc.next());
        int ans = 0;
        for (int i = 0; i < s.length(); ++i) {
            ans = Math.max(s.charAt(i) -'0', ans);
        }
        System.out.println(ans);
        for (int j = 0; j < ans; ++j) {
            boolean flag = false;
            for (int i = 0; i < s.length(); ++i) {
                if(s.charAt(i) > '0' || flag) {
                    if(s.charAt(i) > '0') {
                        flag= true;
                        System.out.print("1");
                        s.setCharAt(i, (char)((int)s.charAt(i) - 1));
//                        s.replace(i, (char)((int)s.charAt(i) - 1));
                    } else {
                        System.out.print("0");
                    }
                }
            }
            System.out.print(" ");
        }
    }

}