#include <algorithm>
#include <iostream>
#include <set>
#include <string>
#include <vector>
std::set<std::string>
retrieve_unique_rotations(std::string s)
{
std::set<std::string> res;
res.insert(s);
if (s.empty()) {
return res;
}
for (std::size_t i = 0, size = s.size() - 1; i != size; ++i) {
std::rotate(s.begin(), s.begin() + 1, s.end());
res.insert(s);
}
return res;
}
int main()
{
for (const auto& s : retrieve_unique_rotations("abcd")) {
std::cout << s << std::endl;
}
std::cout << std::endl;
for (const auto& s : retrieve_unique_rotations("baba")) {
std::cout << s << std::endl;
}
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RkOjpzZXQ8c3RkOjpzdHJpbmc+CnJldHJpZXZlX3VuaXF1ZV9yb3RhdGlvbnMoc3RkOjpzdHJpbmcgcykKewogICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IHJlczsKCiAgICByZXMuaW5zZXJ0KHMpOwogICAgaWYgKHMuZW1wdHkoKSkgewogICAgICAgIHJldHVybiByZXM7CiAgICB9CiAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwLCBzaXplID0gcy5zaXplKCkgLSAxOyBpICE9IHNpemU7ICsraSkgewogICAgICAgIHN0ZDo6cm90YXRlKHMuYmVnaW4oKSwgcy5iZWdpbigpICsgMSwgcy5lbmQoKSk7CiAgICAgICAgcmVzLmluc2VydChzKTsKICAgIH0KICAgIHJldHVybiByZXM7Cn0KCmludCBtYWluKCkKewogICAgZm9yIChjb25zdCBhdXRvJiBzIDogcmV0cmlldmVfdW5pcXVlX3JvdGF0aW9ucygiYWJjZCIpKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8IHMgPDwgc3RkOjplbmRsOwogICAgfQogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgIGZvciAoY29uc3QgYXV0byYgcyA6IHJldHJpZXZlX3VuaXF1ZV9yb3RhdGlvbnMoImJhYmEiKSkgewogICAgICAgIHN0ZDo6Y291dCA8PCBzIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIAp9Cg==