#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> generate(int pos, int N, int mn_sum, vector<pair<int, int>> &a) {
if (N < mn_sum || pos >= a.size()) return {};
vector<vector<int>> ret;
pair<int, int> p = a[pos];
if (pos == a.size() - 1 && N <= p.second) {
ret.push_back({N});
return ret;
}
int mn = p.first, mx = p.second;
for (int i = mn; i <= mx; i++) {
auto cur = generate(pos + 1, N - i, mn_sum - mn, a);
for (auto c: cur) {
c.insert(c.begin(), i);
ret.push_back(c);
}
}
return ret;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int N; // input given by user
cin >> N;
vector<pair<int, int>> a = {{25, 30}, {25, 30}, {17, 20}, {5, 10}, {8, 10}};
int mn_sum = 0;
for (auto p: a) mn_sum += p.first;
//generate all possible solutions
auto res = generate(0, N, mn_sum, a);
if (res.size() == 0) {
cout << "No answer possible for the given N" << "\n";
} else {
//randomly pick one answer between 0 and res.size()
//you can replace this with any desired probability distribution methods
srand(time(NULL)); // Seed the time
int rand_num = rand() % (res.size());
for (int v: res[rand_num])
cout << v << " ";
cout << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8dmVjdG9yPGludD4+IGdlbmVyYXRlKGludCBwb3MsIGludCBOLCBpbnQgbW5fc3VtLCB2ZWN0b3I8cGFpcjxpbnQsIGludD4+ICZhKSB7CiAgICBpZiAoTiA8IG1uX3N1bSB8fCBwb3MgPj0gYS5zaXplKCkpIHJldHVybiB7fTsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gcmV0OwogICAgcGFpcjxpbnQsIGludD4gcCA9IGFbcG9zXTsKICAgIGlmIChwb3MgPT0gYS5zaXplKCkgLSAxICYmIE4gPD0gcC5zZWNvbmQpIHsKICAgICAgICByZXQucHVzaF9iYWNrKHtOfSk7CiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KICAgIGludCBtbiA9IHAuZmlyc3QsIG14ID0gcC5zZWNvbmQ7CiAgICBmb3IgKGludCBpID0gbW47IGkgPD0gbXg7IGkrKykgewogICAgICAgIGF1dG8gY3VyID0gZ2VuZXJhdGUocG9zICsgMSwgTiAtIGksIG1uX3N1bSAtIG1uLCBhKTsKICAgICAgICBmb3IgKGF1dG8gYzogY3VyKSB7CiAgICAgICAgICAgIGMuaW5zZXJ0KGMuYmVnaW4oKSwgaSk7CiAgICAgICAgICAgIHJldC5wdXNoX2JhY2soYyk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJldDsKfQoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApOwogICAgaW50IE47IC8vIGlucHV0IGdpdmVuIGJ5IHVzZXIKICAgIGNpbiA+PiBOOwogICAgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBhID0ge3syNSwgMzB9LCB7MjUsIDMwfSwgezE3LCAyMH0sIHs1LCAxMH0sIHs4LCAxMH19OwogICAgaW50IG1uX3N1bSA9IDA7CiAgICBmb3IgKGF1dG8gcDogYSkgbW5fc3VtICs9IHAuZmlyc3Q7CgoJLy9nZW5lcmF0ZSBhbGwgcG9zc2libGUgc29sdXRpb25zCiAgICBhdXRvIHJlcyA9IGdlbmVyYXRlKDAsIE4sIG1uX3N1bSwgYSk7CiAgICAKICAgIGlmIChyZXMuc2l6ZSgpID09IDApIHsKICAgICAgICBjb3V0IDw8ICJObyBhbnN3ZXIgcG9zc2libGUgZm9yIHRoZSBnaXZlbiBOIiA8PCAiXG4iOwogICAgfSBlbHNlIHsKICAgICAgICAvL3JhbmRvbWx5IHBpY2sgb25lIGFuc3dlciBiZXR3ZWVuIDAgYW5kIHJlcy5zaXplKCkKICAgICAgICAvL3lvdSBjYW4gcmVwbGFjZSB0aGlzIHdpdGggYW55IGRlc2lyZWQgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uIG1ldGhvZHMKICAgICAgICBzcmFuZCh0aW1lKE5VTEwpKTsgLy8gU2VlZCB0aGUgdGltZQogICAgICAgIGludCByYW5kX251bSA9IHJhbmQoKSAlIChyZXMuc2l6ZSgpKTsKICAgICAgICBmb3IgKGludCB2OiByZXNbcmFuZF9udW1dKSAKICAgICAgICAgICAgY291dCA8PCB2IDw8ICIgIjsKICAgICAgICBjb3V0IDw8ICJcbiI7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=