#include <vector>
using std::vector;
#include <iostream>
using std::cout;
//def powerSet(elts):
vector<vector<int>> powerSet(const vector<int>& elts)
{
// if len(elts) == 0:
if (elts.empty()) {
// return [[]]
return vector<vector<int>>(1, vector<int>());
}
// else:
else {
// smaller = powerSet(elts[1:])
vector<vector<int>> allofthem = powerSet(
vector<int>(elts.begin() +1, elts.end()));
// elt = [elts[0]]
int elt = elts[0]; // in Python elt is a list (of int)
// withElt = []
// for s in smaller:
// withElt.append(s + elt)
// allofthem = smaller + withElt
const int n = allofthem.size();
for (int i=0; i<n; ++i) {
const vector<int>& s = allofthem[i];
allofthem.push_back(s);
allofthem.back().push_back(elt);
}
// return allofthem
return allofthem;
}
}
int main()
{
const int N = 5;
vector<int> input;
for(int i=1; i<=N; ++i) {
input.push_back(i);
}
vector<vector<int>> ps = powerSet(input);
for(const vector<int>& set:ps) {
cout << "[ ";
for(int elt: set) {
cout << elt << " ";
}
cout << "]\n";
}
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgc3RkOjp2ZWN0b3I7CiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgc3RkOjpjb3V0OwoKLy9kZWYgcG93ZXJTZXQoZWx0cyk6CnZlY3Rvcjx2ZWN0b3I8aW50Pj4gcG93ZXJTZXQoY29uc3QgdmVjdG9yPGludD4mIGVsdHMpCnsKLy8gIGlmIGxlbihlbHRzKSA9PSAwOgogICAgaWYgKGVsdHMuZW1wdHkoKSkgewovLyAgICAgIHJldHVybiBbW11dCiAgICAgICAgcmV0dXJuIHZlY3Rvcjx2ZWN0b3I8aW50Pj4oMSwgdmVjdG9yPGludD4oKSk7CiAgICB9Ci8vICBlbHNlOgogICAgZWxzZSB7Ci8vICAgICAgc21hbGxlciA9IHBvd2VyU2V0KGVsdHNbMTpdKQogICAgICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gYWxsb2Z0aGVtID0gcG93ZXJTZXQoCiAgICAgICAgICAgIHZlY3RvcjxpbnQ+KGVsdHMuYmVnaW4oKSArMSwgZWx0cy5lbmQoKSkpOwovLyAgICAgIGVsdCA9IFtlbHRzWzBdXQogICAgICAgIGludCBlbHQgPSBlbHRzWzBdOyAvLyBpbiBQeXRob24gZWx0IGlzIGEgbGlzdCAob2YgaW50KQovLyAgICAgIHdpdGhFbHQgPSBbXQovLyAgICAgIGZvciBzIGluIHNtYWxsZXI6Ci8vICAgICAgICAgIHdpdGhFbHQuYXBwZW5kKHMgKyBlbHQpCi8vICAgICAgYWxsb2Z0aGVtID0gc21hbGxlciArIHdpdGhFbHQKICAgICAgICBjb25zdCBpbnQgbiA9IGFsbG9mdGhlbS5zaXplKCk7CiAgICAgICAgZm9yIChpbnQgaT0wOyBpPG47ICsraSkgewogICAgICAgICAgICBjb25zdCB2ZWN0b3I8aW50PiYgcyA9IGFsbG9mdGhlbVtpXTsKICAgICAgICAgICAgYWxsb2Z0aGVtLnB1c2hfYmFjayhzKTsKICAgICAgICAgICAgYWxsb2Z0aGVtLmJhY2soKS5wdXNoX2JhY2soZWx0KTsKICAgICAgICB9Ci8vICAgICAgcmV0dXJuIGFsbG9mdGhlbQogICAgICAgIHJldHVybiBhbGxvZnRoZW07CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgY29uc3QgaW50IE4gPSA1OwogICAgdmVjdG9yPGludD4gaW5wdXQ7CiAgICBmb3IoaW50IGk9MTsgaTw9TjsgKytpKSB7CiAgICAgICAgaW5wdXQucHVzaF9iYWNrKGkpOwogICAgfQogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBwcyA9IHBvd2VyU2V0KGlucHV0KTsKICAgIGZvcihjb25zdCB2ZWN0b3I8aW50PiYgc2V0OnBzKSB7CiAgICAgICAgY291dCA8PCAiWyAiOwogICAgICAgIGZvcihpbnQgZWx0OiBzZXQpIHsKICAgICAgICAgICAgY291dCA8PCBlbHQgPDwgIiAiOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8ICJdXG4iOwogICAgfQogICAgcmV0dXJuIDA7Cn0K