N = gets.to_i A = N.times.map { gets.chomp } M = gets.to_i B = M.times.map { gets.chomp } S = A.map(&:size).sum E1 = Hash.new { |h, k| h[k] = Hash.new(false) } ANS = [] N.times do |i| a1 = A[i].chars a1.each_cons(2) do |c1, c2| E1[c1][c2] = true end N.times do |j| next if i == j a2 = A[j].chars E1[a1.last][a2.first] = true end end E2 = Hash.new { |h, k| h[k] = Hash.new(false) } M.times do |i| b1 = B[i].chars b1.each_cons(2) do |c1, c2| E2[c1][c2] = true end M.times do |j| next if i == j b2 = B[j].chars E2[b1.last][b2.first] = true end end def dfs(c, str, visited) return if ANS.size >= 2 visited[c] = true if str.size == S ANS << str visited[c] = false return end E1[c].each do |nc, _| next if visited[nc] next if not E2[c][nc] dfs(nc, str + nc, visited) end visited[c] = false end A.each do |a| next if not B.find { |b| a[0] == b[0] } visited = Hash.new(false) dfs(a[0], a[0], visited) end if ANS.size == 1 puts ANS.first else puts -1 end