#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+CiNkZWZpbmUgRmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2RlZmluZSBsbCBsb25nIGxvbmcKCgoKCgp2b2lkIHNvbHZlKGNvbnN0IHZlY3RvcjxpbnQ+JiBudW1zLCBpbnQgc2l6ZSwgaW50IHQsCiAgICBpbnQgaWR4LCBpbnQgc3VtLCB2ZWN0b3I8aW50PiBob2xkZXIsCiAgICBzZXQ8dmVjdG9yPGludD4+JiBhbnMpIHsKICAgIGlmIChzdW0gPT0gdCkgewogICAgICAgIGFucy5pbnNlcnQoaG9sZGVyKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoaWR4ID09IHNpemUpIHsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBzb2x2ZShudW1zLCBzaXplLCB0LCBpZHggKyAxLCBzdW0sIGhvbGRlciwgYW5zKTsKICAgIGhvbGRlci5wdXNoX2JhY2sobnVtc1tpZHhdKTsKICAgIHNvbHZlKG51bXMsIHNpemUsIHQsIGlkeCArIDEsIHN1bSArIG51bXNbaWR4XSwgaG9sZGVyLCBhbnMpOwp9Cgp2b2lkIHN1bWl0dXAoKSB7CiAgICBtdWx0aW1hcDxpbnQsIHNldDx2ZWN0b3I8aW50Pj4+IG1wOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpbnQgdCwgc2l6ZTsgY2luID4+IHQgPj4gc2l6ZTsKICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2ZWN0b3I8aW50PiBudW1zKHNpemUpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgIGNpbiA+PiBudW1zW2ldOwogICAgICAgIH0KICAgICAgICBzZXQ8dmVjdG9yPGludD4+IGFuczsKCiAgICAgICAgdmVjdG9yPGludD4gY3VycmVudDsKICAgICAgICBzb2x2ZShudW1zLCBzaXplLCB0LCAwLCAwLCBjdXJyZW50LCBhbnMpOwogICAgICAgIG1wLmluc2VydCh7IHQsIGFucyB9KTsKICAgIH0KCiAgICBmb3IgKGNvbnN0IGF1dG8mIGt2IDogbXApIHsKICAgICAgICBjb25zdCBpbnQgVCA9IGt2LmZpcnN0OwogICAgICAgIGNvbnN0IGF1dG8mIHN1bXMgPSBrdi5zZWNvbmQ7CgogICAgICAgIGNvdXQgPDwgIlN1bXMgb2YgIiA8PCBUIDw8ICI6XG4iOwoKICAgICAgICBpZiAoc3Vtcy5lbXB0eSgpKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIk5PTkVcbiI7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgZm9yIChhdXRvIGl0ID0gc3Vtcy5yYmVnaW4oKTsgaXQgIT0gc3Vtcy5yZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgY29uc3QgYXV0byYgdiA9ICppdDsKICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICBpZiAoaSkgY291dCA8PCAiKyI7CiAgICAgICAgICAgICAgICBjb3V0IDw8IHZbaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY291dCA8PCAiXG4iOwogICAgICAgIH0KICAgIH0KfQppbnQgbWFpbigpIHsKICAgIEZhc3Q7CiAgICBpbnQgdCA9IDE7CgogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHN1bWl0dXAoKTsKICAgIH0KICAgIHJldHVybiAwOwp9