#include <iostream>
#include <algorithm>
#include <vector>
typedef std::vector<int> VecType;
typedef std::vector<std::vector<int>> ResType;
/////////////////////////////////////////////////////////////////////////////
void Build(const size_t P, VecType T, const size_t N, const VecType& D, ResType &R) {
T.push_back(D[P]);
if (T.size() == N) R.push_back(T); else
for(size_t i=P+1; i<D.size(); i++) Build(i,T,N,D,R);
}
/////////////////////////////////////////////////////////////////////////////
int main() {
try {
// инициализация
const size_t N = 3;
VecType D = {2,1,3,5,4};
if (N > D.size()) throw std::logic_error(":(");
ResType R = {};
VecType T = {};
// генерация
for(size_t i=0; i<D.size()-N+1; i++) Build(i,T,N,D,R);
// сортировка
for(auto &i:R) std::sort(i.begin(),i.end(),std::less<int>());
sort(R.begin(),R.end(),[&](auto &i,auto &j) {
return std::lexicographical_compare(i.begin(),i.end(),j.begin(),j.end());
});
// печать
for(const auto &i:R) {
for(const auto &j:i) std::cout << j << " ";
std::cout << std::endl;
}
} catch(std::logic_error &E) {
std::cout << "Ошибка: " << E.what() << std::endl;
} catch(...) {
std::cout << "Ошибка: что-то пошло не так!" << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgoKdHlwZWRlZiBzdGQ6OnZlY3RvcjxpbnQ+IFZlY1R5cGU7CnR5cGVkZWYgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8aW50Pj4gUmVzVHlwZTsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgp2b2lkIEJ1aWxkKGNvbnN0IHNpemVfdCBQLCBWZWNUeXBlIFQsIGNvbnN0IHNpemVfdCBOLCBjb25zdCBWZWNUeXBlJiBELCBSZXNUeXBlICZSKSB7CiAgVC5wdXNoX2JhY2soRFtQXSk7ICAKICBpZiAoVC5zaXplKCkgPT0gTikgUi5wdXNoX2JhY2soVCk7IGVsc2UgCiAgICBmb3Ioc2l6ZV90IGk9UCsxOyBpPEQuc2l6ZSgpOyBpKyspIEJ1aWxkKGksVCxOLEQsUik7ICAgCn0KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgppbnQgbWFpbigpIHsKICB0cnkgewogICAgLy8g0LjQvdC40YbQuNCw0LvQuNC30LDRhtC40Y8gIAogICAgY29uc3Qgc2l6ZV90IE4gPSAzOyAgCiAgICBWZWNUeXBlIEQgPSB7MiwxLDMsNSw0fTsKICAgIGlmIChOID4gRC5zaXplKCkpIHRocm93IHN0ZDo6bG9naWNfZXJyb3IoIjooIik7ICAKICAgIFJlc1R5cGUgUiA9IHt9OwogICAgVmVjVHlwZSBUID0ge307ICAKICAgIC8vINCz0LXQvdC10YDQsNGG0LjRjyAgCiAgICBmb3Ioc2l6ZV90IGk9MDsgaTxELnNpemUoKS1OKzE7IGkrKykgQnVpbGQoaSxULE4sRCxSKTsgIAogICAgLy8g0YHQvtGA0YLQuNGA0L7QstC60LAgCiAgICBmb3IoYXV0byAmaTpSKSBzdGQ6OnNvcnQoaS5iZWdpbigpLGkuZW5kKCksc3RkOjpsZXNzPGludD4oKSk7CiAgICBzb3J0KFIuYmVnaW4oKSxSLmVuZCgpLFsmXShhdXRvICZpLGF1dG8gJmopIHsKICAgICAgcmV0dXJuIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoaS5iZWdpbigpLGkuZW5kKCksai5iZWdpbigpLGouZW5kKCkpOwogICAgfSk7CiAgICAvLyDQv9C10YfQsNGC0YwgIAogICAgZm9yKGNvbnN0IGF1dG8gJmk6UikgewogICAgICBmb3IoY29uc3QgYXV0byAmajppKSBzdGQ6OmNvdXQgPDwgaiA8PCAiICI7CiAgICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7ICAKICAgIH0KICB9IGNhdGNoKHN0ZDo6bG9naWNfZXJyb3IgJkUpIHsKICAgIHN0ZDo6Y291dCA8PCAi0J7RiNC40LHQutCwOiAiIDw8IEUud2hhdCgpIDw8IHN0ZDo6ZW5kbDsgIAogIH0gY2F0Y2goLi4uKSB7CiAgICBzdGQ6OmNvdXQgPDwgItCe0YjQuNCx0LrQsDog0YfRgtC+LdGC0L4g0L/QvtGI0LvQviDQvdC1INGC0LDQuiEiIDw8IHN0ZDo6ZW5kbDsgIAogIH0gICAgCiAgcmV0dXJuIDA7ICAgIAp9