#include <iostream>
#include <map>
#include <string>
#include <vector>

std::vector<std::string> translate(const std::vector<std::string>& v,
                                const std::map<std::string, std::vector<std::string>>& m)
{
    if (v.empty()) {
        return {};
    }
    std::vector<std::string> res = {""};

    for (const auto& s : v) {
        std::vector<std::string> tmp;

        for (const auto& seq : m.at(s)) {
            for (const auto& old: res) {
                tmp.push_back(old + seq);
            }
        }
        res = std::move(tmp);
    }
    return res;
}


int main()
{
    const std::map<std::string, std::vector<std::string>> mapping = {{"K", {"AAA", "GAA"}}};

    for (const auto& s : translate({"K", "K"}, mapping)) {
        std::cout << s << std::endl;
    }

    return 0;
}
