#include <iostream>
#include <vector>
#include <cstdint>
#include <algorithm>
#include <tuple>
#include <functional>
typedef std::vector<std::int64_t> DType;
typedef std::vector<DType> RType;
bool Add(DType& D,std::size_t Rdx) {
bool C = true;
if (D.size() == 0)return false;
for (std::size_t i = 0; i < D.size(); i++) {
if (C == true) {
D[i]++;
}
else {
return true;
}
C = false;
if (D[i] > Rdx) {
C = true;
D[i] = 1;
}
}
return false;
}
DType MakeVector(std::size_t N) {
DType V(N);
std::int64_t i = 1;
for (auto& o : V) {
o = i;
i++;
}
return V;
}
bool IsAnswer(DType& D, std::size_t N) {
std::int64_t V = 0;
for (auto& o : D) {
V += o;
}
return V == N;
}
RType MakeHoge(std::size_t N) {
DType D;
RType R;
for (std::size_t i = 1; i < N + 1; i++) {
D.clear();
D.resize(i, 1);
std::size_t Rdx = N - D.size() + 1;
do {
if (IsAnswer(D, N)) {
R.push_back(D);
}
Add(D, Rdx+1);
} while (Rdx+1 != D.back());
}
for (auto& o : R) {
std::sort(o.begin(), o.end(),std::greater<DType::value_type>());
}
std::sort(R.begin(), R.end());
R.erase(std::unique(R.begin(), R.end()), R.end());
return R;
}
bool Show(RType& R) {
for (auto& oo : R) {
for (auto &o : oo) {
std::cout << o << ' ';
}
std::cout << std::endl;
}
return true;
}
int main() {
RType R;
R = MakeHoge(10);
Show(R);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0ZGludD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHR1cGxlPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnR5cGVkZWYgc3RkOjp2ZWN0b3I8c3RkOjppbnQ2NF90PiBEVHlwZTsKdHlwZWRlZiBzdGQ6OnZlY3RvcjxEVHlwZT4gUlR5cGU7CgoKYm9vbCBBZGQoRFR5cGUmIEQsc3RkOjpzaXplX3QgUmR4KSB7Cglib29sIEMgPSB0cnVlOwoJaWYgKEQuc2l6ZSgpID09IDApcmV0dXJuIGZhbHNlOwoKCWZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBELnNpemUoKTsgaSsrKSB7CgkJaWYgKEMgPT0gdHJ1ZSkgewoJCQlEW2ldKys7CgkJfQoJCWVsc2UgewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJQyA9IGZhbHNlOwoJCWlmIChEW2ldID4gUmR4KSB7CgkJCUMgPSB0cnVlOwoJCQlEW2ldID0gMTsKCQl9CQkKCX0KCglyZXR1cm4gZmFsc2U7Cn0KCgpEVHlwZSBNYWtlVmVjdG9yKHN0ZDo6c2l6ZV90IE4pIHsKCURUeXBlIFYoTik7CglzdGQ6OmludDY0X3QgaSA9IDE7Cglmb3IgKGF1dG8mIG8gOiBWKSB7CgkJbyA9IGk7CgkJaSsrOwoJfQoKCXJldHVybiBWOwp9Cgpib29sIElzQW5zd2VyKERUeXBlJiBELCBzdGQ6OnNpemVfdCBOKSB7CglzdGQ6OmludDY0X3QgViA9IDA7Cglmb3IgKGF1dG8mIG8gOiBEKSB7CgkJViArPSBvOwoJfQoJcmV0dXJuIFYgPT0gTjsKfQoKUlR5cGUgTWFrZUhvZ2Uoc3RkOjpzaXplX3QgTikgewoJRFR5cGUgRDsKCglSVHlwZSBSOwoJZm9yIChzdGQ6OnNpemVfdCBpID0gMTsgaSA8IE4gKyAxOyBpKyspIHsKCQlELmNsZWFyKCk7CgkJRC5yZXNpemUoaSwgMSk7CgkJc3RkOjpzaXplX3QgUmR4ID0gTiAtIEQuc2l6ZSgpICsgMTsKCQlkbyB7CgkJCWlmIChJc0Fuc3dlcihELCBOKSkgewoJCQkJUi5wdXNoX2JhY2soRCk7CgkJCX0KCQkJQWRkKEQsIFJkeCsxKTsKCQl9IHdoaWxlIChSZHgrMSAhPSBELmJhY2soKSk7Cgl9CgoJZm9yIChhdXRvJiBvIDogUikgewoJCXN0ZDo6c29ydChvLmJlZ2luKCksIG8uZW5kKCksc3RkOjpncmVhdGVyPERUeXBlOjp2YWx1ZV90eXBlPigpKTsKCX0KCXN0ZDo6c29ydChSLmJlZ2luKCksIFIuZW5kKCkpOwoJUi5lcmFzZShzdGQ6OnVuaXF1ZShSLmJlZ2luKCksIFIuZW5kKCkpLCBSLmVuZCgpKTsKCglyZXR1cm4gUjsKfQoKYm9vbCBTaG93KFJUeXBlJiBSKSB7Cglmb3IgKGF1dG8mIG9vIDogUikgewoJCWZvciAoYXV0byAmbyA6IG9vKSB7CgkJCXN0ZDo6Y291dCA8PCBvIDw8ICcgJzsKCQl9CgkJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCX0KCXJldHVybiB0cnVlOwp9CgppbnQgbWFpbigpIHsKCVJUeXBlIFI7CgoJUiA9IE1ha2VIb2dlKDEwKTsKCVNob3coUik7CgoJcmV0dXJuIDA7Cn0=