http://poj.org/problem?id=1416
#include<cstdio>
#include<cstring>
#define MAXN 100
using namespace std; int c,m;
int ans[MAXN],t[MAXN];
int max,r;
int ansk; void dfs(int n,int sum,int now,int k,int p)
{
if(n==)
{
t[k]=now;
if(sum+now>m) return;
if(sum+now==max) r++;
else if(sum+now>max)
{
max=sum+now;
r=;
ansk=k;
for(int i=; i<=k; i++) ans[i]=t[i];
}
return ;
}
int mm=n%;
dfs(n/,sum,now+p*mm,k,p*);
t[k]=now;
dfs(n/,sum+now,mm,k+,);
}
int main()
{
while(scanf("%d%d",&m,&c)&&c&&m)
{
max=,r=;
dfs(c/,,c%,,);
if(max==)
{
printf("error\n");
continue;
}
if(r>) {printf("rejected\n");continue;}
printf("%d",max);
for(int i=ansk; i>=; i--)
printf(" %d",ans[i]);
printf("\n");
}
return ;
}