#include <iostream>
#include <algorithm>
#include <string>
void Permute(std::string word) {
std::sort(word.begin(), word.end());
int size = word.size();
while (true) {
std::cout << word << std::endl;
int i = size - 2;
for (; i >= 0; --i) {
if (word[i] < word[i+1])
break;
}
if (i < 0)
break;
int j = size - 1;
for (; ; --j) {
if (word[i] < word[j])
break;
}
std::swap(word[i], word[j]);
std::reverse(word.begin() + i + 1, word.end());
}
}
int main(int, char**)
{
Permute("abcd");
std::cout << "----" << std::endl;
std::string s = "abcd";
do
{
std::cout<<s<<std::endl;
} while(std::next_permutation(s.begin(),s.end()));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c3RyaW5nPgoKdm9pZCBQZXJtdXRlKHN0ZDo6c3RyaW5nIHdvcmQpIHsKICAgIHN0ZDo6c29ydCh3b3JkLmJlZ2luKCksIHdvcmQuZW5kKCkpOwogICAgaW50IHNpemUgPSB3b3JkLnNpemUoKTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8IHdvcmQgPDwgc3RkOjplbmRsOwogICAgICAgIGludCBpID0gc2l6ZSAtIDI7CiAgICAgICAgZm9yICg7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgICAgIGlmICh3b3JkW2ldIDwgd29yZFtpKzFdKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChpIDwgMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgaW50IGogPSBzaXplIC0gMTsKICAgICAgICBmb3IgKDsgOyAtLWopIHsKICAgICAgICAgICAgaWYgKHdvcmRbaV0gPCB3b3JkW2pdKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHN0ZDo6c3dhcCh3b3JkW2ldLCB3b3JkW2pdKTsKICAgICAgICBzdGQ6OnJldmVyc2Uod29yZC5iZWdpbigpICsgaSArIDEsIHdvcmQuZW5kKCkpOwogICAgfQp9CgppbnQgbWFpbihpbnQsIGNoYXIqKikKewogICAgUGVybXV0ZSgiYWJjZCIpOwogICAgc3RkOjpjb3V0IDw8ICItLS0tIiA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OnN0cmluZyBzID0gImFiY2QiOwogICAgZG8KICAgIHsgIAogICAgICAgIHN0ZDo6Y291dDw8czw8c3RkOjplbmRsOwogICAgfSB3aGlsZShzdGQ6Om5leHRfcGVybXV0YXRpb24ocy5iZWdpbigpLHMuZW5kKCkpKTsKICAgIHJldHVybiAwOwp9Cg==