>>581
#include<iostream>
#include<vector>
void divide_r(std::vector<std::vector<long> >& all, std::vector<long>& now, long n, long min) {
if (n >= min) {
for (long i = min; i <= n; i ++) {
now.push_back(i);
divide_r(all, now, n-i, i);
now.pop_back();
}
} else if (n == 0) all.push_back(now);
}
std::vector<std::vector<long> > divide(long n) {
std::vector<std::vector<long> > all;
std::vector<long> now;
divide_r(all, now, n, 1);
return all;
}
int main() {
long n;
std::cout << "n="; std::cin >> n;
std::vector<std::vector<long> > all = divide(n);
for (std::vector<std::vector<long> >::const_iterator it = all.begin(); it != all.end(); ++it) {
std::copy(it->begin(), it->end(), std::ostream_iterator<long>(std::cout, " "));
std::cout << std::endl;
}
return 0;
}