using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var n = NN; var s = new string[n]; for (var i = 0; i < n; ++i) s[i] = ReadLine(); var m = NN; var t = new string[m]; for (var i = 0; i < m; ++i) t[i] = ReadLine(); var set = new HashSet(); foreach (var si in s) foreach (var c in si) set.Add(c); var list = new List(set); list.Sort(); var dic = new Dictionary(); for (var i = 0; i < list.Count; ++i) dic[list[i]] = i; var tree = new HashSet[list.Count]; for (var i = 0; i < tree.Length; ++i) tree[i] = new HashSet(); var rev = new int[tree.Length]; foreach (var si in s) { for (var i = 1; i < si.Length; ++i) { tree[dic[si[i - 1]]].Add(dic[si[i]]); rev[dic[si[i]]] = 1; } } foreach (var ti in t) { for (var i = 1; i < ti.Length; ++i) { tree[dic[ti[i - 1]]].Add(dic[ti[i]]); rev[dic[ti[i]]] = 1; } } var zero = 0; var zeroi = 0; for (var i = 0; i < tree.Length; ++i) { if (tree[i].Count > 1) zero += 100; if (tree[i].Count == 0) ++zero; if (rev[i] == 0) zeroi = i; } if (zero != 1) WriteLine(-1); else { var cur = zeroi; var ans = new List(); while (true) { ans.Add(list[cur]); if (tree[cur].Count == 0) break; foreach (var next in tree[cur]) { cur = next; break; } } WriteLine(string.Concat(ans)); } } }