#include <iostream>
#include <string>
#include <algorithm>
#include <set>
#include <iterator>
std::set<std::string> palindromeGen(std::string charactersSet)
{
std::set<std::string> pals;
std::sort(charactersSet.begin(), charactersSet.end());
do
{
if ( std::string(charactersSet.rbegin(), charactersSet.rend()) == charactersSet )
pals.insert(charactersSet);
} while (std::next_permutation(charactersSet.begin(), charactersSet.end()));
return pals;
}
int main()
{
auto retVal = palindromeGen("abcabc");
std::cout << retVal.size() << '\n';
std::copy(retVal.begin(), retVal.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8aXRlcmF0b3I+CgpzdGQ6OnNldDxzdGQ6OnN0cmluZz4gcGFsaW5kcm9tZUdlbihzdGQ6OnN0cmluZyBjaGFyYWN0ZXJzU2V0KSAKewogICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IHBhbHM7CiAgICBzdGQ6OnNvcnQoY2hhcmFjdGVyc1NldC5iZWdpbigpLCBjaGFyYWN0ZXJzU2V0LmVuZCgpKTsKICAgIGRvCiAgICB7CiAgICAJaWYgKCBzdGQ6OnN0cmluZyhjaGFyYWN0ZXJzU2V0LnJiZWdpbigpLCBjaGFyYWN0ZXJzU2V0LnJlbmQoKSkgPT0gY2hhcmFjdGVyc1NldCApCiAgICAJICAgcGFscy5pbnNlcnQoY2hhcmFjdGVyc1NldCk7CiAgICB9IHdoaWxlIChzdGQ6Om5leHRfcGVybXV0YXRpb24oY2hhcmFjdGVyc1NldC5iZWdpbigpLCBjaGFyYWN0ZXJzU2V0LmVuZCgpKSk7CiAgICByZXR1cm4gcGFsczsKfQoKaW50IG1haW4oKQp7IAoJYXV0byByZXRWYWwgPSBwYWxpbmRyb21lR2VuKCJhYmNhYmMiKTsKCXN0ZDo6Y291dCA8PCByZXRWYWwuc2l6ZSgpIDw8ICdcbic7CglzdGQ6OmNvcHkocmV0VmFsLmJlZ2luKCksIHJldFZhbC5lbmQoKSwgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPHN0ZDo6c3RyaW5nPihzdGQ6OmNvdXQsICJcbiIpKTsKfQ==