对于本题而言,我们不妨可以直接贪心,每次尽可能多的把每一位的1消掉一个.如此在线性的复杂度内即可做出.

#include <bits/stdc++.h>
int cnt[8];//统计每位的个数.
std::vector<int>v;
int main()
{
    int n,ans=0;std::cin>>n;
    int p=1000000;for(int i=1;i<=7;i++)    {cnt[i]=n/p;if(cnt[i]) n-=cnt[i]*p;p/=10;ans=std::max(ans,cnt[i]);}
    std::cout<<ans<<'\n';int f=0;
    while(true)
    {
        int f=0,sum=0;
        for(int i=1;i<=7;i++)
        {
            sum*=10;
            if(cnt[i])  {  f=1;sum+=1;cnt[i]--;  }
        }
        if(!f)    break;
        else      v.push_back(sum);
    }
    for(int i=0;i<v.size();i++)    std::cout<<v[i]<<' ';puts("");
}