#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;
}
