Go: // Package main provides
//
// File:  1237.go
// Author: ymiyamoto
//
// Created on Wed Jul 11 10:35:26 2018
//
package main

import (
	"fmt"
	"strconv"
	"strings"
)

func comb(ns []string, aux [][]string) [][]string {
	if len(ns) == 0 {
		return aux
	}
	v := ns[0]
	a := [][]string{}
	for _, au := range aux {
		tmp := make([]string, len(au))
		copy(tmp, au)
		tmp[len(tmp)-1] += v
		a = append(a, tmp)

		au = append(au, v)
		a = append(a, au)
	}

	return comb(ns[1:], a)
}

func main() {
	for {
		var d int
		var num string
		fmt.Scan(&d, &num)
		if d == 0 {
			break
		}

		var min int
		ns := strings.Split(num, "")
		for i := range ns {
			v, _ := strconv.Atoi(ns[i])
			min += v
		}

		var ans int
		var pat []string
		var hasSame bool
		for _, c := range comb(ns[1:], [][]string{{ns[0]}}) {
			var total int
			for _, v := range c {
				n, _ := strconv.Atoi(v)
				total += n
			}
			if ans == total {
				hasSame = true
			} else if ans < total && total <= d {
				ans = total
				pat = c
				hasSame = false
			}
		}

		if ans == 0 {
			fmt.Println("error")
		} else if hasSame {
			fmt.Println("rejected")
		} else {
			fmt.Println(ans, strings.Join(pat, " "))
		}
	}
}

C++: #include<iostream>
#include<string>
#include<stack>
#include<list>
#include<cstdio>

using namespace std;

class Ans{
  int minimam;
  int target;
  list<int> st;
  stack<string> ans;
  const char *str;
  void prl(){
    for(list<int>::iterator it=st.begin();it!=st.end();it++){
      printf("%d ",*it);
    }
    printf("\n");
  }

  void check(int n){
    if(n<0){
      return;
    }else if(n<=minimam){
      char buff[10];
      string s;
      sprintf(buff,"%d ",target-n);
      s=buff;
      for(list<int>::iterator it=st.begin();it!=st.end();it++){
        sprintf(buff,"%d ",*it);
        s+=buff;
      }
      if(n<minimam){
        ans=stack<string>();
      }
      ans.push(s);
      minimam=n;
    }
  }
  void answer(const char *str,int now,int dist){
    if(*str == '\0' && now!=-1) {
      st.push_back(now);
      check(dist-now);
      st.pop_back();
      return;
    }
    if(now!=-1){
      st.push_back(now);
      //cout << now << endl;
      //prl();
      answer(str,-1,dist-now);
      st.pop_back();
    }
    {
      if(now==-1) now=0;
      now=now*10+(*str - '0');
      if(now > dist) return;
      answer(str+1,now,dist);
    }
  }
public:
  Ans(int target,const char *str){
    this->target = target;
    this->str = str;
    this->minimam = 0x7FFFFFFF;
    answer(this->str,-1,this->target);
  }
  void print(){
    if(ans.size()==1){
      cout << ans.top() << endl;
    }else if(ans.size()>1){
      cout << "rejected" << endl;
    }else{
      cout << "error" << endl;
    }
  }
};

int main(){
  int n;
  string m;
  while(cin >> n >> m , !(n==0&&m=="0")){
    Ans a(n,m.c_str());
    //cout << endl;
    a.print();
    //cout << endl;
  }
  return 0;
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
    int t,num;
    while(cin>>t>>num,t|num){
        int len=0,n=num;
        while(n) len++,n/=10;
        vector<int> N;
        n=num;
        while(n) N.push_back(n%10),n/=10;
        reverse(N.begin(), N.end());
        // for(auto a:N)cout<<a<<' ';
        // cout<<endl;
        int ans = -1;
        vector<int> A;
        for(int b=0;b<(1<<(len-1));b++){
            int sum=0,cur=N.front();
            vector<int> V;
            for(int i=1;i<len;i++){
                if(b&(1<<(i-1))){
                    cur*=10;
                    cur+=N[i];
                }else{
                    sum+=cur;
                    V.push_back(cur);
                    cur=N[i];
                }
            }
            sum+=cur;
            V.push_back(cur);
            if(sum<=t&&ans<=sum){
                if(ans==sum) A.clear();
                else ans=sum,A=V;
            }
        }
        if(ans==-1){
            cout<<"error"<<endl;
        }else if(!A.size()){
            cout<<"rejected"<<endl;
        }else{
            cout<<ans;
            for(auto a:A) cout<<' '<<a;
            cout<<endl;
        }
    }

    return 0;
}

C++: #include "bits/stdc++.h"

#define REP(i,n) for(ll i=0;i<n;++i)
#define RREP(i,n) for(ll i=n-1;i>=0;--i)
#define FOR(i,m,n) for(ll i=m;i<n;++i)
#define RFOR(i,m,n) for(ll i=n-1;i>=m;--i)
#define ALL(v) (v).begin(),(v).end()
#define PB(a) push_back(a)
#define UNIQUE(v) v.erase(unique(ALL(v)),v.end());
#define DUMP(v) REP(i, (v).size()) { cout << v[i]; if (i != v.size() - 1)cout << " "; else cout << endl; }
#define INF 1000000001ll
#define MOD 1000000007ll
#define EPS 1e-9

const int dx[8] = { 1,1,0,-1,-1,-1,0,1 };
const int dy[8] = { 0,1,1,1,0,-1,-1,-1 };


using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
ll max(ll a, int b) { return max(a, ll(b)); }
ll max(int a, ll b) { return max(ll(a), b); }
ll min(ll a, int b) { return min(a, ll(b)); }
ll min(int a, ll b) { return min(ll(a), b); }
///(´・ω・`)(´・ω・`)(´・ω・`)(´・ω・`)(´・ω・`)(´・ω・`)///
int main() {
	cin.tie(0);
	ios::sync_with_stdio(false);
	while (1) {
		int t;
		string s;
		cin >> t >> s;
		if (!t)break;
		int n = s.size(), cnt = 0, cmax = -1;
		vi ans;
		REP(i, (1 << n - 1)) {
			int sum = 0;
			int tmp = 0;
			vi x;
			REP(j, n) {
				tmp *= 10;
				tmp += s[j] - '0';
				if (i & 1 << j) {
					sum += tmp;
					x.push_back(tmp);
					tmp = 0;

				}
			}
			sum += tmp;
			x.push_back(tmp);
			if (sum <= t) {
				if (sum == cmax)cnt++;
				else if (sum > cmax) {
					cnt = 1;
					cmax = sum;
					ans = x;
				}
			}
		}
		if (cmax == -1)cout << "error" << endl;
		else if (cnt > 1)cout << "rejected" << endl;
		else {
			cout << cmax << " ";
			DUMP(ans);
		}
	}
	return 0;
}