#include <algorithm>
#include <cstddef>
#include <iostream>
#include <string>
#include <vector>
void permutate(const std::string& s, std::vector<int>& index, std::size_t depth, int& count)
{
if (depth == s.size())
{
++count;
for (std::size_t i = 0; i < s.size(); ++i)
{
std::cout << s[index[i]];
}
std::cout << "\n";
return;
}
for (std::size_t i = 0; i < s.size(); ++i)
{
index[depth] = i;
permutate(s, index, depth+1, count);
}
}
int main()
{
std::string s("CBA");
if (s.find_first_not_of(s.front()) == std::string::npos)
{
std::cout << "Only 1 permutation exists";
return 0;
}
std::sort(s.begin(), s.end());
std::cout << s << "\n**********\n";
std::vector<int> index(s.size());
int count = 0;
permutate(s, index, 0, count);
std::cout << "\nTotal permutations with repetitions: " << count;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNzdGRkZWY+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KCnZvaWQgcGVybXV0YXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzLCBzdGQ6OnZlY3RvcjxpbnQ+JiBpbmRleCwgc3RkOjpzaXplX3QgZGVwdGgsIGludCYgY291bnQpCnsKICAgIGlmIChkZXB0aCA9PSBzLnNpemUoKSkKICAgIHsKICAgICAgICArK2NvdW50OwogICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBzLnNpemUoKTsgKytpKQogICAgICAgIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHNbaW5kZXhbaV1dOwogICAgICAgIH0KICAgICAgICBzdGQ6OmNvdXQgPDwgIlxuIjsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IHMuc2l6ZSgpOyArK2kpCiAgICB7CiAgICAgICAgaW5kZXhbZGVwdGhdID0gaTsKICAgICAgICBwZXJtdXRhdGUocywgaW5kZXgsIGRlcHRoKzEsIGNvdW50KTsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnN0cmluZyBzKCJDQkEiKTsKICAgIAogICAgaWYgKHMuZmluZF9maXJzdF9ub3Rfb2Yocy5mcm9udCgpKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIk9ubHkgMSBwZXJtdXRhdGlvbiBleGlzdHMiOwogICAgICAgIHJldHVybiAwOwogICAgfQogICAgCiAgICBzdGQ6OnNvcnQocy5iZWdpbigpLCBzLmVuZCgpKTsKICAgIAogICAgc3RkOjpjb3V0IDw8IHMgPDwgIlxuKioqKioqKioqKlxuIjsKICAgIAogICAgc3RkOjp2ZWN0b3I8aW50PiBpbmRleChzLnNpemUoKSk7CiAgICBpbnQgY291bnQgPSAwOwogICAgCiAgICBwZXJtdXRhdGUocywgaW5kZXgsIDAsIGNvdW50KTsKICAgIAogICAgc3RkOjpjb3V0IDw8ICJcblRvdGFsIHBlcm11dGF0aW9ucyB3aXRoIHJlcGV0aXRpb25zOiAiIDw8IGNvdW50Owp9