题意:
给两个数n和m,先要求把m切成几个分片,这几个分片之和为s,求max(s)<=n,若s不唯一,输出rejected,若s不存在,输出error,若s存在唯一,则按从左往右的顺序输出分片
例子:
n=50 m=12346
则s=1+2+34+6=43 并且是唯一的,所以输出43 1 2 34 6
n=12 m=111
则s=1+11=11+1=12 不唯一 输出rejected
若n=m 输出n n
若n=m=0 结束
代码:

//author: CHC
//First Edit Time: 2015-06-25 14:18
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <set>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <algorithm>
#include <limits>
using namespace std;
typedef long long LL;
int tx,numx,res[10],ans[10],tmp[10];
void getlen(int numx){
res[0]=0;
res[1]=0;
if(numx==0){
res[0]=1;
return ;
}
while(numx){
res[++res[0]]=numx%10;
numx/=10;
//printf("%d\n",res[res[0]]);
}
}
int getnum(int l,int r){
int ans=0;
for(int i=r;i>=l;i--){
ans=ans*10+res[i];
}
return ans;
}
int checknum(int x){
tmp[0]=0;
int tans=0;
int l=0,r=0;
while(1){
if(l==res[0])break;
r=l+1;
while((x&(1<<r))==0)++r;
tmp[++tmp[0]]=getnum(l+1,r);
tans+=tmp[tmp[0]];
l=r;
}
return tans;
}
void solve(){
if(tx==numx){
printf("%d %d\n",numx,numx);
return ;
}
getlen(numx);
int tt=(1<<(res[0]-1));
int cnt=0;
int tmax=-1;
for(int i=0;i<tt;i++){
int k=i;
k=(k<<1)|1;
k=k|(1<<res[0]);
//i=(i<<1)|1;
//i=i|(1<<(res[0]));
int tans=checknum(k);
if(tmax==-1){
if(tans<=tx){
++cnt;
tmax=tans;
memcpy(ans,tmp,sizeof(tmp));
}
}
else if(tans<=tx&&tmax<=tans){
if(tmax==tans)++cnt;
else cnt=1;
tmax=tans;
memcpy(ans,tmp,sizeof(tmp));
}
}
if(tmax==-1)puts("error");
else if(cnt>1)puts("rejected");
else {
printf("%d",tmax);
for(int i=ans[0];i>=1;i--){
printf(" %d",ans[i]);
}
puts("");
}
}
int main()
{
while(~scanf("%d%d",&tx,&numx)&&(tx||numx))solve();
return 0;
}