#include #include #include using node = std::array; int main() { int N, M; std::cin >> N >> M; std::vector trie(1); while (N--) { std::string S; std::cin >> S; int curr = 0; for (char c : S) { if (trie[curr][c - 'A'] == 0) { trie[curr][c - 'A'] = trie.size(); trie.emplace_back(); } curr = trie[curr][c - 'A']; } } int curr = 0; std::string result; while (M--) { if (curr == -1) { result.push_back('G'); continue; } if (trie[curr]['G' - 'A'] && trie[curr]['C' - 'A'] && trie[curr]['P' - 'A']) { std::cout << -1 << std::endl; return 0; } if (trie[curr]['G' - 'A'] && !trie[curr]['C' - 'A'] && !trie[curr]['P' - 'A']) { result.push_back('P'); curr = -1; continue; } if (!trie[curr]['G' - 'A'] && trie[curr]['C' - 'A'] && !trie[curr]['P' - 'A']) { result.push_back('G'); curr = -1; continue; } if (!trie[curr]['G' - 'A'] && !trie[curr]['C' - 'A'] && trie[curr]['P' - 'A']) { result.push_back('C'); curr = -1; continue; } if (trie[curr]['G' - 'A'] && trie[curr]['C' - 'A']) { result.push_back('G'); curr = trie[curr]['G' - 'A']; continue; } if (trie[curr]['G' - 'A'] && trie[curr]['P' - 'A']) { result.push_back('P'); curr = trie[curr]['P' - 'A']; continue; } if (trie[curr]['P' - 'A'] && trie[curr]['C' - 'A']) { result.push_back('C'); curr = trie[curr]['C' - 'A']; continue; } result.push_back('G'); } if (curr != -1) std::cout << -1 << std::endl; else std::cout << result << std::endl; }