#include using namespace std; int cnt = 0; map toint; map tochar; int main() { int n; cin >> n; vector vs; for (int i = 0; i < n; i++) { string s; cin >> s; for (char c: s) { assert(toint.count(c) == 0); toint[c] = cnt++; tochar[toint[c]] = c; } vs.push_back(s); } vector> adj(cnt, vector(cnt)); for (string& s: vs) { if (s.size() > 1) { for (int i = 1; i < s.size(); i++) { adj[toint[s[i - 1]]][toint[s[i]]] = 1; } } } cin >> n; for (int i = 0; i < n; i++) { string s; cin >> s; if (s.size() > 1) { for (int i = 1; i < s.size(); i++) { assert(toint.count(s[i - 1]) && toint.count(s[i])); adj[toint[s[i - 1]]][toint[s[i]]] = 1; } } } for (int i = 0; i < cnt; i++) { int s = 0; for (int j = 0; j < cnt; j++) { s += adj[i][j]; } assert(s <= 1); } for (int i = 0; i < cnt; i++) { string ans = ""; int crt = i; while (1) { ans += tochar[crt]; bool hasnext = false; for (int j = 0; j < cnt; j++) { if (adj[crt][j]) { crt = j; hasnext = true; break; } } if (!hasnext) { break; } } if (ans.size() == cnt) { cout << ans << endl; return 0; } } cout << -1 << endl; }