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>
#define PI 3.14159265359
typedef long long int ll;
typedef unsigned long long int ull;
using namespace std;
const ll INF=1e9+7;
void input(ll *a,ll n){
    for(ll i=0;i<n;i++)
        cin>>a[i];
}
ll lcm(ll a,ll b)
{
    return (a*b)/__gcd(a,b);
}
bool isprime(ll n){
    if(n==1){
        return false;
    }
    if(n==2 || n==3){
        return true;
    }
    for(ll i=2;i<=sqrt(n);i++){
        if(n%i==0)
            return false;
    }
    return true;
}

//ll x[100001]={0};
//ll p[100001]={0};
//ll a[100001]={0};
//vector<pair<ll,ll> > adj[100001];
//ll dist[100001]={0};


void sieve(ll n,bool *a)
{
    for (ll p=2; p*p<=n; p++){
        if (!a[p]){
            for (ll i=p*p;i<=n;i+=p)
                a[i]=true;
        }
    }
}

ll fact(ll n){
    ll res=1;
    for(ll i=1;i<=n;i++)
        res*=i;
    return res;
}

/*ll distance(ll x1,ll y1,ll x2,ll y2){
    return (ll)ceil(sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
}*/

/*void dfs(ll curr,ll prev,ll weight,bool found){

    if(weight>n)
        return;

    for(u:adj[curr]){
        if(u.first!=prev){
            if(u.second==d || found)
                dfs(u.first,curr,weight+u.second,true);
            else
                dfs(u.first,curr,weight+u.second,false);
        }
    }
    cout<<weight<<" "<<found<<endl;
    if(weight==n && found){
        ans+=1;
        ans=ans%INF;
    }
}*/

void solve(){
    string s;
    cin>>s;

    ll len=s.length();
    ll Max=0;
    char ans[10][10];

    for(ll i=0;i<10;i++)
        for(ll j=0;j<10;j++)
            ans[i][j]='0';

    for(ll i=0;i<len;i++){
        Max=max(Max,(ll)(s[i]-'0'));
    }

    for(ll i=0;i<len;i++){

        for(ll j=0;j<Max;j++){
            if(s[i]!='0')
                ans[j][i]++,s[i]--;
            else break;
        }
    }
    cout<<Max<<endl;
    for(ll i=0;i<Max;i++){
        for(ll j=0;j<len;j++){
            cout<<ans[i][j];
        }
        cout<<" ";
    }
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    //sieve(100001,c);
    ll t=1;
    //cin>>t;
    for(ll i=0;i<t;i++){
        solve();
    }
}
