#include <iostream>
using namespace std;
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#define Fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define ll long long
void solve(const vector<int>& nums, int size, int t,
int idx, int sum, vector<int> holder,
set<vector<int>>& ans) {
if (sum == t) {
ans.insert(holder);
return;
}
if (idx == size) {
return;
}
solve(nums, size, t, idx + 1, sum, holder, ans);
holder.push_back(nums[idx]);
solve(nums, size, t, idx + 1, sum + nums[idx], holder, ans);
}
void sumitup() {
multimap<int, set<vector<int>>> mp;
while (true) {
int t, size; cin >> t >> size;
if (size == 0) {
break;
}
vector<int> nums(size);
for (int i = 0; i < size; i++) {
cin >> nums[i];
}
set<vector<int>> ans;
vector<int> current;
solve(nums, size, t, 0, 0, current, ans);
mp.insert({ t, ans });
}
for (const auto& kv : mp) {
const int T = kv.first;
const auto& sums = kv.second;
cout << "Sums of " << T << ":\n";
if (sums.empty()) {
cout << "NONE\n";
continue;
}
for (auto it = sums.rbegin(); it != sums.rend(); ++it) {
const auto& v = *it;
for (size_t i = 0; i < v.size(); ++i) {
if (i) cout << "+";
cout << v[i];
}
cout << "\n";
}
}
}
int main() {
Fast;
int t = 1;
while (t--) {
sumitup();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8c2V0PgojaW5jbHVkZTxtYXA+CiNkZWZpbmUgRmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2RlZmluZSBsbCBsb25nIGxvbmcKCgoKCgoKdm9pZCBzb2x2ZShjb25zdCB2ZWN0b3I8aW50PiYgbnVtcywgaW50IHNpemUsIGludCB0LAogICAgaW50IGlkeCwgaW50IHN1bSwgdmVjdG9yPGludD4gaG9sZGVyLAogICAgc2V0PHZlY3RvcjxpbnQ+PiYgYW5zKSB7CiAgICBpZiAoc3VtID09IHQpIHsKICAgICAgICBhbnMuaW5zZXJ0KGhvbGRlcik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGlkeCA9PSBzaXplKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgc29sdmUobnVtcywgc2l6ZSwgdCwgaWR4ICsgMSwgc3VtLCBob2xkZXIsIGFucyk7CiAgICBob2xkZXIucHVzaF9iYWNrKG51bXNbaWR4XSk7CiAgICBzb2x2ZShudW1zLCBzaXplLCB0LCBpZHggKyAxLCBzdW0gKyBudW1zW2lkeF0sIGhvbGRlciwgYW5zKTsKfQoKdm9pZCBzdW1pdHVwKCkgewogICAgbXVsdGltYXA8aW50LCBzZXQ8dmVjdG9yPGludD4+PiBtcDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaW50IHQsIHNpemU7IGNpbiA+PiB0ID4+IHNpemU7CiAgICAgICAgaWYgKHNpemUgPT0gMCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgdmVjdG9yPGludD4gbnVtcyhzaXplKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICBjaW4gPj4gbnVtc1tpXTsKICAgICAgICB9CiAgICAgICAgc2V0PHZlY3RvcjxpbnQ+PiBhbnM7CgogICAgICAgIHZlY3RvcjxpbnQ+IGN1cnJlbnQ7CiAgICAgICAgc29sdmUobnVtcywgc2l6ZSwgdCwgMCwgMCwgY3VycmVudCwgYW5zKTsKICAgICAgICBtcC5pbnNlcnQoeyB0LCBhbnMgfSk7CiAgICB9CgogICAgZm9yIChjb25zdCBhdXRvJiBrdiA6IG1wKSB7CiAgICAgICAgY29uc3QgaW50IFQgPSBrdi5maXJzdDsKICAgICAgICBjb25zdCBhdXRvJiBzdW1zID0ga3Yuc2Vjb25kOwoKICAgICAgICBjb3V0IDw8ICJTdW1zIG9mICIgPDwgVCA8PCAiOlxuIjsKCiAgICAgICAgaWYgKHN1bXMuZW1wdHkoKSkgewogICAgICAgICAgICBjb3V0IDw8ICJOT05FXG4iOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGZvciAoYXV0byBpdCA9IHN1bXMucmJlZ2luKCk7IGl0ICE9IHN1bXMucmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgIGNvbnN0IGF1dG8mIHYgPSAqaXQ7CiAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdi5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgaWYgKGkpIGNvdXQgPDwgIisiOwogICAgICAgICAgICAgICAgY291dCA8PCB2W2ldOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdXQgPDwgIlxuIjsKICAgICAgICB9CiAgICB9Cn0KaW50IG1haW4oKSB7CiAgICBGYXN0OwogICAgaW50IHQgPSAxOwoKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzdW1pdHVwKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==