#include <iostream>
#include <vector>
#include <initializer_list>
#include <string>
template <typename T>
auto makeVector(std::initializer_list<T> l) {
return std::vector<T>(l);
}
int main() {
const auto dict = makeVector({"[В]", "[ж]", "[у]", "[х]"});
const size_t dictSize = dict.size();
const size_t wordSize = 5;
size_t current[wordSize] = {};
auto out = [&] {
for (size_t i = 0; i < wordSize; ++i) {
std::cout << dict[current[wordSize - 1 - i]] << ' ';
}
std::cout << '\n';
};
auto done = [&] {
for (size_t i = 0; i < wordSize; ++i) {
if (current[i] < dictSize - 1) {
return false;
}
}
return true;
};
auto inc = [&] {
bool carryFlag = false;
for (size_t i = 0; i < wordSize; ++i) {
size_t newValue = current[i] + 1;
if (newValue >= dictSize) {
carryFlag = true;
continue;
}
if (carryFlag) {
for (size_t j = 0; j <= i; j++) {
current[j] = newValue;
}
} else {
current[i] = newValue;
}
break;
}
};
while (true) {
out();
if (done()) {
break;
}
inc();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KI2luY2x1ZGUgPHN0cmluZz4KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgphdXRvIG1ha2VWZWN0b3Ioc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGwpIHsKICAgIHJldHVybiBzdGQ6OnZlY3RvcjxUPihsKTsKfQoKaW50IG1haW4oKSB7CiAgICBjb25zdCBhdXRvIGRpY3QgPSBtYWtlVmVjdG9yKHsiW9CSXSIsICJb0LZdIiwgIlvRg10iLCAiW9GFXSJ9KTsKICAgIGNvbnN0IHNpemVfdCBkaWN0U2l6ZSA9IGRpY3Quc2l6ZSgpOwogICAgY29uc3Qgc2l6ZV90IHdvcmRTaXplID0gNTsKICAgIAogICAgc2l6ZV90IGN1cnJlbnRbd29yZFNpemVdID0ge307CiAgICAKICAgIGF1dG8gb3V0ID0gWyZdIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRTaXplOyArK2kpIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IGRpY3RbY3VycmVudFt3b3JkU2l6ZSAtIDEgLSBpXV0gPDwgJyAnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKICAgIH07CiAgICAKICAgIGF1dG8gZG9uZSA9IFsmXSB7CiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkU2l6ZTsgKytpKSB7CiAgICAgICAgICAgIGlmIChjdXJyZW50W2ldIDwgZGljdFNpemUgLSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogICAgCiAgICBhdXRvIGluYyA9IFsmXSB7CiAgICAgICAgYm9vbCBjYXJyeUZsYWcgPSBmYWxzZTsKCiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkU2l6ZTsgKytpKSB7CiAgICAgICAgICAgIHNpemVfdCBuZXdWYWx1ZSA9IGN1cnJlbnRbaV0gKyAxOwoKICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID49IGRpY3RTaXplKSB7CiAgICAgICAgICAgICAgICBjYXJyeUZsYWcgPSB0cnVlOwoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoY2FycnlGbGFnKSB7CiAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8PSBpOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2pdID0gbmV3VmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjdXJyZW50W2ldID0gbmV3VmFsdWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgb3V0KCk7CgogICAgICAgIGlmIChkb25lKCkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBpbmMoKTsKICAgIH0KfQo=