分析

易证:对于一个位置上的1来说,直接消除,绝对比进位消除优(显然
所以我们只需要每次贪心消去非零位上的一个1即可

代码

//20zr 18 day4 C
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>

#define LL long long
#define Cl(X,Y) memset((X),(Y),sizeof(X))
#define FOR(i,A,B) for(int i=A;i<=B;i++)
#define BOR(i,A,B) for(int i=A;i>=B;i--)
#define Lowbit(X) (X & (-X))
#define Skip cout<<endl;
#define INF 0x3f3f3f3f
#define Mod 998244353
#define Rson (X<<1|1)
#define Lson (X<<1)
using namespace std;
const int MaxN=1e6+10;

int Total,Num[MaxN],Cnt,Ans,Temp[11];
char Res[11][MaxN];

inline void File() {
    freopen(".in","r",stdin);
    freopen(".out","w",stdout);
}

int main() {
    // File();
    // ios::sync_with_stdio(false);
    scanf("%d",&Total);
    while(Total) { Num[++Cnt]=Total%10; Total/=10; }
    FOR(i,0,9) {
        bool Jud=false,Sta=false;
        BOR(j,Cnt,1) {
            if(Num[j]) { Res[i][++Temp[i]]='1'; Num[j]--; Jud |= true; Sta=true; }
            else { if(Sta) { Res[i][++Temp[i]]='0'; } }
        }
        if(Jud) { Ans++; }
    }
    cout<<Ans<<endl;
    FOR(i,0,Ans-1) {
        FOR(j,1,Temp[i]) { printf("%c",Res[i][j]); }
        cout<<" ";
    }
    // fclose(stdin);
    // fclose(stdout);
    system("pause");
    return 0;
}