#include <iostream>
#include <limits>
#include <bitset>
#include <type_traits>
using namespace std;
template <typename T>
void printBitRepresentation(T x) {
using unsignedT = typename std::make_unsigned<T>::type;
auto value = static_cast<unsignedT>(x);
cout << bitset<numeric_limits<unsignedT>::digits>(value) << endl;
}
template <typename T>
T getNextHigherNumberContainingEqualSetBits(T x) {
if (x == 0) return 0;
T a = x & -x;
T b = a + x;
T r = b | (((x ^ b) >> 2) / a);
return r;
}
template <typename T>
void generateAllSubsets(T start) {
printBitRepresentation(start);
for (auto cur = getNextHigherNumberContainingEqualSetBits(start); cur > start; cur = getNextHigherNumberContainingEqualSetBits(cur))
printBitRepresentation(cur);
}
int main() {
const auto bitsize = numeric_limits<unsigned int>::digits;
generateAllSubsets((1u << (bitsize-1)) - 1);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGltaXRzPgojaW5jbHVkZSA8Yml0c2V0PgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kdm9pZCBwcmludEJpdFJlcHJlc2VudGF0aW9uKFQgeCkgewoJdXNpbmcgdW5zaWduZWRUID0gdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlOwoJYXV0byB2YWx1ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkVD4oeCk7Cgljb3V0IDw8IGJpdHNldDxudW1lcmljX2xpbWl0czx1bnNpZ25lZFQ+OjpkaWdpdHM+KHZhbHVlKSA8PCBlbmRsOyAKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ClQgZ2V0TmV4dEhpZ2hlck51bWJlckNvbnRhaW5pbmdFcXVhbFNldEJpdHMoVCB4KSB7CglpZiAoeCA9PSAwKSByZXR1cm4gMDsKCVQgYSA9IHggJiAteDsKCVQgYiA9IGEgKyB4OwoJVCByID0gYiB8ICgoKHggXiBiKSA+PiAyKSAvIGEpOwoJcmV0dXJuIHI7Cn0KdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgZ2VuZXJhdGVBbGxTdWJzZXRzKFQgc3RhcnQpIHsKCXByaW50Qml0UmVwcmVzZW50YXRpb24oc3RhcnQpOwoJZm9yIChhdXRvIGN1ciA9IGdldE5leHRIaWdoZXJOdW1iZXJDb250YWluaW5nRXF1YWxTZXRCaXRzKHN0YXJ0KTsgY3VyID4gc3RhcnQ7IGN1ciA9IGdldE5leHRIaWdoZXJOdW1iZXJDb250YWluaW5nRXF1YWxTZXRCaXRzKGN1cikpCgkJcHJpbnRCaXRSZXByZXNlbnRhdGlvbihjdXIpOwp9CgppbnQgbWFpbigpIHsKCWNvbnN0IGF1dG8gYml0c2l6ZSA9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46OmRpZ2l0czsKCWdlbmVyYXRlQWxsU3Vic2V0cygoMXUgPDwgKGJpdHNpemUtMSkpIC0gMSk7CglyZXR1cm4gMDsKfQ==