#include <iostream>
#include <vector>
void generatesum(int n, int maxPart, std::vector<int>& current) {
if (n == 0) {
// print one valid partition
for (size_t i = 0; i < current.size(); i++) {
std::cout << current[i];
if (i + 1 < current.size()) std::cout << "+";
}
std::cout << "\n";
return;
}
for (int part = std::min(n, maxPart); part >= 1; part--) {
current.push_back(part);
generatesum(n - part, part, current);
current.pop_back();
}
}
int main() {
int n = 5;
std::vector<int> current;
generatesum(n, 4, current);
}
/*
run:
4+1
3+2
3+1+1
2+2+1
2+1+1+1
1+1+1+1+1
*/