#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
void print(std::vector<int>& a) {
std::ostream_iterator<int> i(std::cout, " ");
std::copy(a.begin(), a.end(), i);
std::cout << "\n";
}
void recurse(std::vector<int>& a, int pos, int remaining) {
if (remaining == 0) { print(a); return; }
if (pos == a.size()) { return; }
for (int i = remaining; i >= 0; --i) {
a[pos] = i;
recurse(a, pos + 1, remaining - i);
}
}
int main() {
int sum_val = 2, n = 5;
std::vector<int> a(n);
recurse(a, 0, sum_val);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp2b2lkIHByaW50KHN0ZDo6dmVjdG9yPGludD4mIGEpIHsKICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8aW50PiBpKHN0ZDo6Y291dCwgIiAiKTsKICBzdGQ6OmNvcHkoYS5iZWdpbigpLCBhLmVuZCgpLCBpKTsKICBzdGQ6OmNvdXQgPDwgIlxuIjsKfQoKdm9pZCByZWN1cnNlKHN0ZDo6dmVjdG9yPGludD4mIGEsIGludCBwb3MsIGludCByZW1haW5pbmcpIHsKICBpZiAocmVtYWluaW5nID09IDApIHsgcHJpbnQoYSk7IHJldHVybjsgfQogIGlmIChwb3MgPT0gYS5zaXplKCkpIHsgcmV0dXJuOyB9CiAgZm9yIChpbnQgaSA9IHJlbWFpbmluZzsgaSA+PSAwOyAtLWkpIHsKICAgIGFbcG9zXSA9IGk7CiAgICByZWN1cnNlKGEsIHBvcyArIDEsIHJlbWFpbmluZyAtIGkpOwogIH0KfQoKaW50IG1haW4oKSB7CiAgaW50IHN1bV92YWwgPSAyLCBuID0gNTsKICBzdGQ6OnZlY3RvcjxpbnQ+IGEobik7CiAgcmVjdXJzZShhLCAwLCBzdW1fdmFsKTsKICByZXR1cm4gMDsKfQo=