#include #include #include #include using namespace std; vector have; int tour(const vector> &g, vector *path, size_t len) { int n = static_cast(g.size()); vector indeg(n), utdeg(n); for(int u=0; u(); stack stk; stk.push(u); vector idx(n); while(!stk.empty()) { int v = stk.top(); stk.pop(); while(idx[v] < g[v].size()) { stk.push(v); v = g[v][idx[v]++]; } path->push_back(v); } if(path->size() == len) { return 1 + (k == 0); } } } return 0; } int main(void) { int N; cin >> N; vector nxt(26, -1); have.assign(26, false); vector> G(26, vector()); size_t len = 0; for(int loop=0; loop> s; len += s.size(); for(int i=0, n=static_cast(s.size()); i> M; for(int loop=0; loop> s; for(int i=0, n=static_cast(s.size()); i path; int state = tour(G, &path, len); if(!state) { puts("-1"); return 0; } reverse(path.begin(), path.end()); string res; for(int vi : path) { res += static_cast(vi + 'A'); } cout << res << '\n'; return 0; }