#include <iostream>
#include <vector>
using namespace std;
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) {
// If the i-th bit is set in the current mask,
// include arr[i] in the current subset
if (mask & (1 << i)) {
cout << arr[i] << " ";
}
}
cout << "}" << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CiAgICAvLyBEZWZpbmUgdGhlIG9yaWdpbmFsIGFycmF5IC0geW91IGNhbiBjaGFuZ2UgdGhlIGVsZW1lbnRzIGFzIG5lZWRlZAogICAgdmVjdG9yPGludD4gYXJyID0gezEsIDIsIDN9OwogICAgaW50IG4gPSBhcnIuc2l6ZSgpOwoKICAgIC8vIFRvdGFsIG51bWJlciBvZiBzdWJzZXRzID0gMl5uCiAgICBpbnQgdG90YWxTdWJzZXRzID0gMSA8PCBuOwoKICAgIGNvdXQgPDwgIkFsbCBzdWJzZXRzOiIgPDwgZW5kbDsKCiAgICAvLyBMb29wIHRocm91Z2ggYWxsIHBvc3NpYmxlIGJpdG1hc2tzIGZyb20gMCB0byAyXm4gLSAxCiAgICBmb3IgKGludCBtYXNrID0gMDsgbWFzayA8IHRvdGFsU3Vic2V0czsgKyttYXNrKSB7CiAgICAgICAgY291dCA8PCAieyAiOwogICAgICAgIAogICAgICAgIC8vIENoZWNrIGVhY2ggYml0IG9mIHRoZSBtYXNrCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgICAgLy8gSWYgdGhlIGktdGggYml0IGlzIHNldCBpbiB0aGUgY3VycmVudCBtYXNrLAogICAgICAgICAgICAvLyBpbmNsdWRlIGFycltpXSBpbiB0aGUgY3VycmVudCBzdWJzZXQKICAgICAgICAgICAgaWYgKG1hc2sgJiAoMSA8PCBpKSkgewogICAgICAgICAgICAgICAgY291dCA8PCBhcnJbaV0gPDwgIiAiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBjb3V0IDw8ICJ9IiA8PCBlbmRsOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==