// UVa 574 ac
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 15
int n, total, flag, data[MAX], cnt[MAX], used[MAX];
void search(int depth, int sum)
{
int i, j, first = 1;
if (depth > n) {
if (sum != total) return;
for (i = 0; i <= n; i++) {
for (j = 0; j < used[i]; j++)
if (first) {
printf("%d", data[i]);
first = 0;
} else printf("+%d", data[i]);
}
printf("\n");
flag = 0;
return;
}
for (i = cnt[depth]; i >= 0; i--) {
if (sum + i*data[depth] > total) continue;
used[depth] = i;
search(depth + 1, sum + i*data[depth]);
}
}
int main(void)
{
int i, len;
while (scanf("%d %d", &total, &len) == 2 && len) {
scanf("%d", &data[0]);
memset(cnt, 0, sizeof(cnt));
memset(used, 0, sizeof(used));
cnt[n = 0] = 1;
for (i = 1; i < len; i++) {
scanf("%d", &data[n + 1]);
if (data[n + 1] == data[n]) cnt[n]++;
else cnt[++n] = 1;
}
flag = 1;
printf("Sums of %d:\n", total);
search(0, 0);
if (flag) printf("NONE\n");
}
return 0;
}
// 下面是没有ac的代码, 但是我看不出哪里有错???
// 下面是没有ac的代码, 但是我看不出哪里有错???
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 130
int n, total, data[MAX], flag[MAX];
int mark, alen, ans[MAX], prev[MAX], plen;
void output(void)
{
int i;
if (alen < plen) return;
if (alen == plen) {
for (i = 0; i < alen; i++)
if (ans[i] != prev[i])
goto out;
return;
}
out: printf("%d", ans[0]);
for (i = 1; i < alen; i++) printf("+%d", ans[i]);
printf("\n");
mark = 0;
plen = alen;
for (i = 0; i < alen; i++) prev[i] = ans[i];
}
void dfs(int floor)
{
int i, sum;
if (floor >= n) return;
flag[floor] = 1;
for (i = 0, sum = 0, alen = 0; i < n; i++) {
if (flag[i]) {
sum += data[i];
ans[alen++] = data[i];
}
}
if (sum == total) {
output();
flag[floor] = 0;
dfs(floor + 1);
} else if (sum > total) {
flag[floor] = 0;
dfs(floor + 1);
} else {
dfs(floor + 1);
flag[floor] = 0;
dfs(floor + 1);
}
}
int main(void)
{
int i;
while (scanf("%d %d", &total, &n) && n) {
for (i = 0; i < n; i++) scanf("%d", &data[i]);
memset(flag, 0, sizeof(flag));
plen = 0;
mark = 1;
printf("Sums of %d:\n", total);
dfs(0);
if (mark) printf("NONE\n");
}
return 0;
}
