#include <iostream>
#include <string>
using namespace std;
bool shouldSwap(const string& str, size_t start, size_t index) {
for (auto i = start; i < index; ++i) {
if (str[i] == str[index])
return false;
}
return true;
}
void permute(string& str, size_t index)
{
if (index >= str.size()) {
cout << str << endl;;
return;
}
for (size_t i = index; i < str.size(); ++i) {
if(shouldSwap(str, index, i)) {
swap(str[index], str[i]);
permute(str, index + 1);
swap(str[index], str[i]);
}
}
}
int main()
{
string str = "0101";
permute(str, 0);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmJvb2wgc2hvdWxkU3dhcChjb25zdCBzdHJpbmcmIHN0ciwgc2l6ZV90IHN0YXJ0LCBzaXplX3QgaW5kZXgpIHsKICBmb3IgKGF1dG8gaSA9IHN0YXJ0OyBpIDwgaW5kZXg7ICsraSkgewogICAgaWYgKHN0cltpXSA9PSBzdHJbaW5kZXhdKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp2b2lkIHBlcm11dGUoc3RyaW5nJiBzdHIsIHNpemVfdCBpbmRleCkKewogIGlmIChpbmRleCA+PSBzdHIuc2l6ZSgpKSB7CiAgICBjb3V0IDw8IHN0ciA8PCBlbmRsOzsKICAgIHJldHVybjsKICB9CgogIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA8IHN0ci5zaXplKCk7ICsraSkgewogICAgaWYoc2hvdWxkU3dhcChzdHIsIGluZGV4LCBpKSkgewogICAgICBzd2FwKHN0cltpbmRleF0sIHN0cltpXSk7CiAgICAgIHBlcm11dGUoc3RyLCBpbmRleCArIDEpOwogICAgICBzd2FwKHN0cltpbmRleF0sIHN0cltpXSk7CiAgICB9CiAgfQp9CgppbnQgbWFpbigpCnsKICBzdHJpbmcgc3RyID0gIjAxMDEiOwogIHBlcm11dGUoc3RyLCAwKTsKICByZXR1cm4gMDsKfQ==