#include <iostream>
#include <array>
#include <string>
#include <unordered_set>
using namespace std;
const size_t MaxRows = 3;
const size_t MaxColumns = 3;
const size_t MaxCells = MaxRows * MaxColumns;
using gridRow = std::array<char, MaxColumns>;
using grid = std::array<gridRow, MaxRows>;
grid CreateGrid(const std::string &keyword)
{
grid g;
std::unordered_set<char> lookup;
size_t numFilled = 0;
for(size_t i = 0; (i < keyword.size()) && (numFilled < MaxCells); ++i)
{
if (lookup.insert(keyword[i]).second)
{
g[numFilled / 3][numFilled % 3] = keyword[i];
++numFilled;
}
}
for(char ch = 'A'; (ch <= 'Y') && (numFilled < MaxCells); ++ch)
{
if (lookup.insert(ch).second)
{
g[numFilled / 3][numFilled % 3] = ch;
++numFilled;
}
}
return g;
}
int main()
{
grid myArray = CreateGrid("HELO");
for(int row = 0; row < MaxRows; ++row) {
for(int col = 0; col < MaxColumns; ++col) {
cout << myArray[row][col] << " ";
}
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3Qgc2l6ZV90IE1heFJvd3MgPSAzOwpjb25zdCBzaXplX3QgTWF4Q29sdW1ucyA9IDM7CmNvbnN0IHNpemVfdCBNYXhDZWxscyA9IE1heFJvd3MgKiBNYXhDb2x1bW5zOwoKdXNpbmcgZ3JpZFJvdyA9IHN0ZDo6YXJyYXk8Y2hhciwgTWF4Q29sdW1ucz47CnVzaW5nIGdyaWQgPSBzdGQ6OmFycmF5PGdyaWRSb3csIE1heFJvd3M+OwoKZ3JpZCBDcmVhdGVHcmlkKGNvbnN0IHN0ZDo6c3RyaW5nICZrZXl3b3JkKQp7CiAgICBncmlkIGc7CiAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y2hhcj4gbG9va3VwOwogICAgc2l6ZV90IG51bUZpbGxlZCA9IDA7CgogICAgZm9yKHNpemVfdCBpID0gMDsgKGkgPCBrZXl3b3JkLnNpemUoKSkgJiYgKG51bUZpbGxlZCA8IE1heENlbGxzKTsgKytpKQogICAgewogICAgICAgIGlmIChsb29rdXAuaW5zZXJ0KGtleXdvcmRbaV0pLnNlY29uZCkKICAgICAgICB7CiAgICAgICAgICAgIGdbbnVtRmlsbGVkIC8gM11bbnVtRmlsbGVkICUgM10gPSBrZXl3b3JkW2ldOwogICAgICAgICAgICArK251bUZpbGxlZDsKICAgICAgICB9CiAgICB9CgogICAgZm9yKGNoYXIgY2ggPSAnQSc7IChjaCA8PSAnWScpICYmIChudW1GaWxsZWQgPCBNYXhDZWxscyk7ICsrY2gpCiAgICB7CiAgICAgICAgaWYgKGxvb2t1cC5pbnNlcnQoY2gpLnNlY29uZCkKICAgICAgICB7CiAgICAgICAgICAgIGdbbnVtRmlsbGVkIC8gM11bbnVtRmlsbGVkICUgM10gPSBjaDsKICAgICAgICAgICAgKytudW1GaWxsZWQ7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBnOwp9CgppbnQgbWFpbigpCnsKICAgIGdyaWQgbXlBcnJheSA9IENyZWF0ZUdyaWQoIkhFTE8iKTsKCWZvcihpbnQgcm93ID0gMDsgcm93IDwgTWF4Um93czsgKytyb3cpIHsKCQlmb3IoaW50IGNvbCA9IDA7IGNvbCA8IE1heENvbHVtbnM7ICsrY29sKSB7CgkJCWNvdXQgPDwgbXlBcnJheVtyb3ddW2NvbF0gPDwgIiAiOwoJCX0KCQljb3V0IDw8IGVuZGw7Cgl9CiAgICByZXR1cm4gMDsKfQ==