#include <iostream>
#include <vector>
//#include <string>
#include <cmath>
int main(int argc, char* argv)
{
std::vector<std::string> signs;
signs.push_back("a");
signs.push_back("b");
size_t digits = 3;
size_t num_variations = pow(signs.size(), digits);
std::vector<std::string> variations;
variations.resize(num_variations * digits);
size_t sign_index = 0;
for (size_t column = 0; column < digits; ++column)
{
size_t row = 0;
for (size_t subindex1 = 0; subindex1 < pow(signs.size(), column + 1); ++subindex1)
{
for (size_t subindex2 = 0; subindex2 < pow(signs.size(), digits - (column + 1)); ++subindex2)
{
variations[digits * row + column] = signs[sign_index % signs.size()];
++row;
}
++sign_index;
}
}
size_t index = 0;
for (size_t index_a = 0; index_a < num_variations; ++index_a)
{
for (size_t index_b = 0; index_b < digits; ++index_b)
{
std::cout << variations[index] << " ";
++index;
}
std::cout << '\n';
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgovLyNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxjbWF0aD4KCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2KQp7CglzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc2lnbnM7CglzaWducy5wdXNoX2JhY2soImEiKTsKCXNpZ25zLnB1c2hfYmFjaygiYiIpOwoKCXNpemVfdCBkaWdpdHMgPSAzOwoJc2l6ZV90IG51bV92YXJpYXRpb25zID0gcG93KHNpZ25zLnNpemUoKSwgZGlnaXRzKTsKCglzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdmFyaWF0aW9uczsKCXZhcmlhdGlvbnMucmVzaXplKG51bV92YXJpYXRpb25zICogZGlnaXRzKTsKCglzaXplX3Qgc2lnbl9pbmRleCA9IDA7CgkKCWZvciAoc2l6ZV90IGNvbHVtbiA9IDA7IGNvbHVtbiA8IGRpZ2l0czsgKytjb2x1bW4pCgl7CgkJc2l6ZV90IHJvdyA9IDA7CgkJCgkJZm9yIChzaXplX3Qgc3ViaW5kZXgxID0gMDsgc3ViaW5kZXgxIDwgcG93KHNpZ25zLnNpemUoKSwgY29sdW1uICsgMSk7ICsrc3ViaW5kZXgxKQoJCXsKCQkJZm9yIChzaXplX3Qgc3ViaW5kZXgyID0gMDsgc3ViaW5kZXgyIDwgcG93KHNpZ25zLnNpemUoKSwgZGlnaXRzIC0gKGNvbHVtbiArIDEpKTsgKytzdWJpbmRleDIpCgkJCXsKCQkJCXZhcmlhdGlvbnNbZGlnaXRzICogcm93ICsgY29sdW1uXSA9IHNpZ25zW3NpZ25faW5kZXggJSBzaWducy5zaXplKCldOwoKCQkJCSsrcm93OwoJCQl9CgoJCQkrK3NpZ25faW5kZXg7CQoJCX0KCX0KCglzaXplX3QgaW5kZXggPSAwOwoJZm9yIChzaXplX3QgaW5kZXhfYSA9IDA7IGluZGV4X2EgPCBudW1fdmFyaWF0aW9uczsgKytpbmRleF9hKQoJewoJCWZvciAoc2l6ZV90IGluZGV4X2IgPSAwOyBpbmRleF9iIDwgZGlnaXRzOyArK2luZGV4X2IpCgkJewoJCQlzdGQ6OmNvdXQgPDwgdmFyaWF0aW9uc1tpbmRleF0gPDwgIiAiOwoJCQkrK2luZGV4OwoJCX0KCQlzdGQ6OmNvdXQgPDwgJ1xuJzsKCX0KfQ==