#include <iostream>
#include <algorithm>
template<typename T>
void do_job(const std::vector<T>& v, const std::vector<std::size_t>& groups)
{
std::cout << " e(";
for (std::size_t i = 0; i != v.size(); ++i) {
if (groups[i] == 0) {
std::cout << " " << v[i];
}
}
std::cout << ",";
for (std::size_t i = 0; i != v.size(); ++i) {
if (groups[i] == 1) {
std::cout << " " << v[i];
}
}
std::cout << ")\n";
}
template<typename T>
void print_combinations(const std::vector<T>& v)
{
std::vector<std::size_t> groups(v.size() / 2, 0);
groups.resize(v.size(), 1);
do {
do_job(v, groups);
} while (std::next_permutation(groups.begin(), groups.end()));
}
int main()
{
std::vector<int> numbers = {1, 2, 3, 4};
print_combinations(numbers);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBkb19qb2IoY29uc3Qgc3RkOjp2ZWN0b3I8VD4mIHYsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c2l6ZV90PiYgZ3JvdXBzKQp7CiAgICBzdGQ6OmNvdXQgPDwgIiBlKCI7CiAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpICE9IHYuc2l6ZSgpOyArK2kpIHsKICAgICAgICBpZiAoZ3JvdXBzW2ldID09IDApIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICIgIiA8PCB2W2ldOwogICAgICAgIH0KICAgIH0KICAgIHN0ZDo6Y291dCA8PCAiLCI7CiAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpICE9IHYuc2l6ZSgpOyArK2kpIHsKICAgICAgICBpZiAoZ3JvdXBzW2ldID09IDEpIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICIgIiA8PCB2W2ldOwogICAgICAgIH0KICAgIH0KICAgIHN0ZDo6Y291dCA8PCAiKVxuIjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBwcmludF9jb21iaW5hdGlvbnMoY29uc3Qgc3RkOjp2ZWN0b3I8VD4mIHYpCnsKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2l6ZV90PiBncm91cHModi5zaXplKCkgLyAyLCAwKTsKICAgIGdyb3Vwcy5yZXNpemUodi5zaXplKCksIDEpOwogICAgCiAgICBkbyB7CiAgICAgICAgZG9fam9iKHYsIGdyb3Vwcyk7CiAgICB9IHdoaWxlIChzdGQ6Om5leHRfcGVybXV0YXRpb24oZ3JvdXBzLmJlZ2luKCksIGdyb3Vwcy5lbmQoKSkpOwp9CiAKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IG51bWJlcnMgPSB7MSwgMiwgMywgNH07CiAgICBwcmludF9jb21iaW5hdGlvbnMobnVtYmVycyk7Cn0K