#include <iostream>
#include <string>
#include <random>
void swap(char &a, char &b) { char t = a; a = b; b = t; }
bool isSorted(std::string str) {
bool ret = true;
for (int i = 0; i < str.size() - 1; i++)
if (str[i] > str[i + 1]) {
ret = false;
break;
}
return ret;
}
void bogosort(std::string &str, int seed) {
std::mt19937 MT(seed);
while (!isSorted(str)) {
/*Fisher?Yates shuffle */
for (int n = str.size(); n > 0; --n) {
int r = MT() % n;
swap(str[r], str[n - 1]);
}
}
}
int const seed = 31415926;
int main() {
std::string str = "lkjihgfedcba";
bogosort(str, seed);
std::cout << str << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8cmFuZG9tPgoKdm9pZCBzd2FwKGNoYXIgJmEsIGNoYXIgJmIpIHsgY2hhciB0ID0gYTsgYSA9IGI7IGIgPSB0OyB9Cgpib29sIGlzU29ydGVkKHN0ZDo6c3RyaW5nIHN0cikgewogIGJvb2wgcmV0ID0gdHJ1ZTsKICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5zaXplKCkgLSAxOyBpKyspCiAgICBpZiAoc3RyW2ldID4gc3RyW2kgKyAxXSkgewogICAgICByZXQgPSBmYWxzZTsKICAgICAgYnJlYWs7CiAgICB9CiAgcmV0dXJuIHJldDsKfQoKdm9pZCBib2dvc29ydChzdGQ6OnN0cmluZyAmc3RyLCBpbnQgc2VlZCkgewogIHN0ZDo6bXQxOTkzNyBNVChzZWVkKTsKICB3aGlsZSAoIWlzU29ydGVkKHN0cikpIHsKICAgIC8qRmlzaGVyP1lhdGVzIHNodWZmbGUgKi8KICAgIGZvciAoaW50IG4gPSBzdHIuc2l6ZSgpOyBuID4gMDsgLS1uKSB7CiAgICAgIGludCByID0gTVQoKSAlIG47CiAgICAgIHN3YXAoc3RyW3JdLCBzdHJbbiAtIDFdKTsKICAgIH0KICB9Cn0KCmludCBjb25zdCBzZWVkID0gMzE0MTU5MjY7CmludCBtYWluKCkgewogIHN0ZDo6c3RyaW5nIHN0ciA9ICJsa2ppaGdmZWRjYmEiOwogIGJvZ29zb3J0KHN0ciwgc2VlZCk7CiAgc3RkOjpjb3V0IDw8IHN0ciA8PCBzdGQ6OmVuZGw7CiAgcmV0dXJuIDA7Cn0K