#include <iostream>
#include <vector>
using namespace std;
// Function to check if the i-th bit is set in a given mask
bool is_set(int mask, int i) {
return (mask & (1 << i)) != 0;
}
int main() {
// Define the original array - you can change the elements as needed
vector<int> arr = {1, 2, 3};
int n = arr.size();
// Total number of subsets = 2^n
int totalSubsets = 1 << n;
cout << "All subsets:" << endl;
// Loop through all possible bitmasks from 0 to 2^n - 1
for (int mask = 0; mask < totalSubsets; ++mask) {
cout << "{ ";
// Check each bit of the mask
for (int i = 0; i < n; ++i) {
// Use the is_set function to check if the i-th bit is on
if (is_set(mask, i)) {
cout << arr[i] << " ";
}
}
cout << "}" << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGktdGggYml0IGlzIHNldCBpbiBhIGdpdmVuIG1hc2sKYm9vbCBpc19zZXQoaW50IG1hc2ssIGludCBpKSB7CiAgICByZXR1cm4gKG1hc2sgJiAoMSA8PCBpKSkgIT0gMDsKfQoKaW50IG1haW4oKSB7CiAgICAvLyBEZWZpbmUgdGhlIG9yaWdpbmFsIGFycmF5IC0geW91IGNhbiBjaGFuZ2UgdGhlIGVsZW1lbnRzIGFzIG5lZWRlZAogICAgdmVjdG9yPGludD4gYXJyID0gezEsIDIsIDN9OwogICAgaW50IG4gPSBhcnIuc2l6ZSgpOwoKICAgIC8vIFRvdGFsIG51bWJlciBvZiBzdWJzZXRzID0gMl5uCiAgICBpbnQgdG90YWxTdWJzZXRzID0gMSA8PCBuOwoKICAgIGNvdXQgPDwgIkFsbCBzdWJzZXRzOiIgPDwgZW5kbDsKCiAgICAvLyBMb29wIHRocm91Z2ggYWxsIHBvc3NpYmxlIGJpdG1hc2tzIGZyb20gMCB0byAyXm4gLSAxCiAgICBmb3IgKGludCBtYXNrID0gMDsgbWFzayA8IHRvdGFsU3Vic2V0czsgKyttYXNrKSB7CiAgICAgICAgY291dCA8PCAieyAiOwoKICAgICAgICAvLyBDaGVjayBlYWNoIGJpdCBvZiB0aGUgbWFzawogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgICAgIC8vIFVzZSB0aGUgaXNfc2V0IGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBpLXRoIGJpdCBpcyBvbgogICAgICAgICAgICBpZiAoaXNfc2V0KG1hc2ssIGkpKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8IGFycltpXSA8PCAiICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGNvdXQgPDwgIn0iIDw8IGVuZGw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K