#include <iostream>
#include <string>
using namespace std;
void recurse(
const string &s, unsigned mask = 0, const string &out = string())
{
size_t n = s.size();
if (out.size() == n) cout << ' ' << out;
for (size_t i = 0; i < n; ++i) {
unsigned bit = 1 << i;
if (mask & bit) continue;
recurse(s, mask | bit, out + s[i]);
}
}
int main() {
string test = "red";
recurse(test);
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgcmVjdXJzZSgKICBjb25zdCBzdHJpbmcgJnMsIHVuc2lnbmVkIG1hc2sgPSAwLCBjb25zdCBzdHJpbmcgJm91dCA9IHN0cmluZygpKQp7CiAgc2l6ZV90IG4gPSBzLnNpemUoKTsKICBpZiAob3V0LnNpemUoKSA9PSBuKSBjb3V0IDw8ICcgJyA8PCBvdXQ7CiAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgIHVuc2lnbmVkIGJpdCA9IDEgPDwgaTsKICAgIGlmIChtYXNrICYgYml0KSBjb250aW51ZTsKICAgIHJlY3Vyc2UocywgbWFzayB8IGJpdCwgb3V0ICsgc1tpXSk7CiAgfQp9CgppbnQgbWFpbigpIHsKICBzdHJpbmcgdGVzdCA9ICJyZWQiOwogIHJlY3Vyc2UodGVzdCk7CiAgY291dCA8PCBlbmRsOwogIHJldHVybiAwOwp9