// Jarod42
#include <algorithm>
#include <cassert>
#include <iostream>
#include <iterator>
#include <vector>
bool increase(std::vector<bool>& bs)
{
for (std::size_t i = 0; i != bs.size(); ++i) {
bs[i] = !bs[i];
if (bs[i] == true) {
return true;
}
}
return false; // overflow
}
template <typename T>
void PowerSet(const std::vector<T>& v)
{
std::vector<bool> bitset(v.size());
do {
for (std::size_t i = 0; i != v.size(); ++i) {
if (bitset[i]) {
std::cout << v[i] << " ";
}
}
std::cout << std::endl;
} while (increase(bitset));
}
int main()
{
std::vector<char> vc{ 'A', 'B', 'C', 'D' };
std::cout << "\n------POWERSET-------------\n";
PowerSet(vc);
}
Ly8gSmFyb2Q0MgoKI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNhc3NlcnQ+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8dmVjdG9yPgoKYm9vbCBpbmNyZWFzZShzdGQ6OnZlY3Rvcjxib29sPiYgYnMpCnsKICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgIT0gYnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICBic1tpXSA9ICFic1tpXTsKICAgICAgICBpZiAoYnNbaV0gPT0gdHJ1ZSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7IC8vIG92ZXJmbG93Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIFBvd2VyU2V0KGNvbnN0IHN0ZDo6dmVjdG9yPFQ+JiB2KQp7CiAgICBzdGQ6OnZlY3Rvcjxib29sPiBiaXRzZXQodi5zaXplKCkpOwoKICAgIGRvIHsKICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpICE9IHYuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgaWYgKGJpdHNldFtpXSkgewogICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHZbaV0gPDwgIiAiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgICB9IHdoaWxlIChpbmNyZWFzZShiaXRzZXQpKTsKfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3RvcjxjaGFyPiB2Y3sgJ0EnLCAnQicsICdDJywgJ0QnIH07CiAgICBzdGQ6OmNvdXQgPDwgIlxuLS0tLS0tUE9XRVJTRVQtLS0tLS0tLS0tLS0tXG4iOwogICAgUG93ZXJTZXQodmMpOwp9Cg==