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.text.*;
import java.util.*;
import java.io.*;
import java.math.*;
import java.util.concurrent.LinkedBlockingQueue;

public class BQuasiBinary {
    BufferedReader br;
    PrintWriter out;
    StringTokenizer st;
    boolean eof;


    void solve() throws IOException {
        int n = nextInt();
        ArrayList<Integer> a = new ArrayList<Integer>();
        while(n > 0){
        	String q = String.valueOf(n);
        	//out.println(q);
        	int start = 1;
        	int sum = 0;
        	for(int i = 0; i < q.length();i ++){
        		if(q.charAt(i) == '0'){
        			
        		}
        		else{
        			sum+=start;
        		}
        		start*=10;
        	}
        	a.add(sum);
        	n-=sum;
//        	
//            int N = n, m = 0, p = 1;
//            //410 subtract 110
//            while(N > 0){
//                if(N%10 != 0){
//                    m+=p;
//                }
//                N/=10;
//                p*=10;
//            }
//            a.add(m);
//            n-=m;
        }
        System.out.println(a.size());
        for(int i: a){
            out.print(i + " ");
        }
    }
    void hello(){
        System.out.println("HELLO?");
    }
    ArrayList<Integer> qb(int n){
        Queue<String> q = new LinkedBlockingQueue<String>();
        ArrayList<Integer> a = new ArrayList<Integer>();
        q.add("1");
        while(n>0){
            n--;
            String s1 = q.peek();
            a.add(Integer.valueOf(s1));
           // System.out.println(s1);
            q.poll();
            String s2 = s1;
            q.add(s1.concat("0"));
            q.add(s2.concat("1"));
        }
        return a;
    }
    BQuasiBinary() throws IOException {
        br = new BufferedReader(new InputStreamReader(System.in));
        out = new PrintWriter(System.out);
        solve();
        out.close();
    }

    public static void main(String[] args) throws IOException {
        new BQuasiBinary();
    }

    String nextToken() {
        while (st == null || !st.hasMoreTokens()) {
            try {
                st = new StringTokenizer(br.readLine());
            } catch (Exception e) {
                eof = true;
                return null;
            }
        }
        return st.nextToken();
    }

    String nextString() {
        try {
            return br.readLine();
        } catch (IOException e) {
            eof = true;
            return null;
        }
    }

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

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

    double nextDouble() throws IOException {
        return Double.parseDouble(nextToken());
    }
}