1 #include"cstring"
2 #include"cstdio"
3 const int maxn=100+5;
4 int nux[maxn];
5 int nua[maxn];//解的集合
6 int t;//t为和
7 int n;//n为元素个数
8 bool flag;//判断是否有解
9 void dfs(int sum,int cur,int k){//sum剩余的大小 k为下标,cur为元素个数
10 if(sum==0){
11 flag=false;//证明有解
12 for(int i=0;i<cur;i++)
13 if(i==0)
14 printf("%d",nua[i]);
15 else
16 printf("+%d",nua[i]);
17 printf("\n");
18 return;
19 }
20 for(int i=k;i<n;i++){
21 if(i==k||nux[i]!=nux[i-1]&&sum>=nux[i]){//判断是否重叠
22 nua[cur]=nux[i];
23 dfs(sum-nux[i],cur+1,i+1);
24 }
25 }
26 }
27 int main(){
28 while(scanf("%d%d",&t,&n)!=EOF){
29 if(n==0&&t==0) break;
30 for(int i=0;i<n;i++){
31 scanf("%d",&nux[i]);
32 }
33 flag=true;
34 printf("Sums of %d:\n", t);
35 dfs(t,0,0);
36 if(flag)
37 printf("NONE\n");
38 }
39 return 0;
40 }