#include <iostream>
#include <string>
#include <algorithm>
using size_type = std::size_t;
using symbol_type = std::string;
using char_type = typename symbol_type::value_type;
template< size_type n >
struct test
{
//static_assert(!(size_type('z' - 'a') + 1 < n));
void
print(symbol_type const & _symbol) const
{
std::cout << _symbol << std::endl;
}
bool
operator () () const
{
symbol_type mishmash_(n, char_type('a' - 1));
int cidx = 0;
while (cidx >= 0) {
if(cidx == n) {
print(mishmash_);
--cidx;
} else {
if(++mishmash_[cidx] == char_type('a' + n)) --cidx;
else mishmash_[++cidx] = char_type('a' - 1);
}
}
return true;
}
};
int
main()
{
test< 3 > const test_{};
if (test_()) {
std::cout << "Succes!" << std::endl;
return EXIT_SUCCESS;
} else {
std::cerr << "Failure!" << std::endl;
return EXIT_FAILURE;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgc2l6ZV90eXBlID0gc3RkOjpzaXplX3Q7CnVzaW5nIHN5bWJvbF90eXBlID0gc3RkOjpzdHJpbmc7CnVzaW5nIGNoYXJfdHlwZSA9IHR5cGVuYW1lIHN5bWJvbF90eXBlOjp2YWx1ZV90eXBlOwoKdGVtcGxhdGU8IHNpemVfdHlwZSBuID4Kc3RydWN0IHRlc3QKewoKICAgIC8vc3RhdGljX2Fzc2VydCghKHNpemVfdHlwZSgneicgLSAnYScpICsgMSA8IG4pKTsKCiAgICB2b2lkCiAgICBwcmludChzeW1ib2xfdHlwZSBjb25zdCAmIF9zeW1ib2wpIGNvbnN0CiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8IF9zeW1ib2wgPDwgc3RkOjplbmRsOwogICAgfQoKICAgIGJvb2wKICAgIG9wZXJhdG9yICgpICgpIGNvbnN0CiAgICB7CiAgICAgICAgc3ltYm9sX3R5cGUgbWlzaG1hc2hfKG4sIGNoYXJfdHlwZSgnYScgLSAxKSk7CiAgICAgICAgaW50IGNpZHggPSAwOwogICAgICAgIHdoaWxlIChjaWR4ID49IDApIHsKICAgICAgICAJaWYoY2lkeCA9PSBuKSB7CiAgICAgICAgCQlwcmludChtaXNobWFzaF8pOwogICAgICAgIAkJLS1jaWR4OwogICAgICAgIAl9IGVsc2UgewogICAgICAgIAkgICAgaWYoKyttaXNobWFzaF9bY2lkeF0gPT0gY2hhcl90eXBlKCdhJyArIG4pKSAtLWNpZHg7CiAgICAgICAgCSAgICBlbHNlIG1pc2htYXNoX1srK2NpZHhdID0gY2hhcl90eXBlKCdhJyAtIDEpOwogICAgICAgIAl9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKfTsKCmludAptYWluKCkKewogICAgdGVzdDwgMyA+IGNvbnN0IHRlc3Rfe307CiAgICBpZiAodGVzdF8oKSkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiU3VjY2VzISIgPDwgc3RkOjplbmRsOwogICAgICAgIHJldHVybiBFWElUX1NVQ0NFU1M7CiAgICB9IGVsc2UgewogICAgICAgIHN0ZDo6Y2VyciA8PCAiRmFpbHVyZSEiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwogICAgfQp9