1 #include<map>
2 #include<string>
3 #include<cstdio>
4 #include<cstring>
5 #include<iostream>
6 #include<algorithm>
7 #define MAXN 20
8 using namespace std;
9 int a[MAXN], temp[MAXN], vis[MAXN];
10 int T, N, flag, sum;
11 string ss;
12 char str[MAXN];
13 map<string, int>mp;
14 bool cmp(int a, int b){return a > b;}
15 void dfs(int dep, int idx){
16 if(sum > T) return;
17 if(idx == N && sum != T) return;
18 if(sum == T){
19 flag ++;
20 if(flag == 1) printf("Sums of %d:\n", T);
21 for(int i = 0; i < dep; i ++) str[i] = temp[i];
22 ss.clear();
23 ss = str;
24 mp[ss]++;
25 if(mp[ss] == 1){
26 for(int i = 0; i < dep-1; i ++) printf("%d+", temp[i]);
27 printf("%d\n", temp[dep-1]);
28 }
29 return;
30 }
31 for(int i = idx; i < N; i ++){
32 if(!vis[i]){
33 vis[i] = 1;
34 temp[dep] = a[i];
35 sum += a[i];
36 dfs(dep+1, i+1);
37 sum -= a[i];
38 vis[i] = 0;
39 }
40 }
41 }
42 int main(){
43 int tt;
44 /* freopen("in.c", "r", stdin); */
45 while(~scanf("%d%d", &T, &N) && N+T){
46 tt = 0;
47 memset(vis, 0, sizeof(vis));
48 for(int i = 0; i < N; i ++) scanf("%d", a+i),tt += a[i];
49 if(tt < T){
50 printf("Sums of %d:\nNONE\n", T);
51 continue;
52 }
53 sort(a, a+N, cmp);
54 mp.clear();
55 sum = flag = 0;
56 dfs(0, 0);
57 if(!flag) printf("Sums of %d:\nNONE\n", T);
58 }
59 return 0;
60 }