fn main() { let mut n = String::new(); std::io::stdin().read_line(&mut n).ok(); let n: usize = n.trim().parse().unwrap(); let a = (0..n).map(|_| { let mut temp = String::new(); std::io::stdin().read_line(&mut temp).ok(); let temp = temp.trim(); temp.chars().collect::>() }) .collect::>(); let mut m = String::new(); std::io::stdin().read_line(&mut m).ok(); let m: usize = m.trim().parse().unwrap(); let b = (0..m).map(|_| { let mut temp = String::new(); std::io::stdin().read_line(&mut temp).ok(); let temp = temp.trim(); temp.chars().collect::>() }) .collect::>(); let length = a.iter().map(|v| v.len()).sum::(); for i in 0..n { let mut lefts = String::new(); let mut rights = String::new(); for &c in a[i].iter() { lefts.push(c); } while lefts.len() < length || rights.len() < length { if lefts.len() == rights.len() { break; } if lefts.len() < rights.len() { let idx = lefts.len(); let val = rights.chars().nth(idx).unwrap(); if let Some(word) = a.iter().filter(|&v| v[0] == val).nth(0) { word.iter().for_each(|&c| lefts.push(c)); } else { break; } } else { let idx = rights.len(); let val = lefts.chars().nth(idx).unwrap(); if let Some(word) = b.iter().filter(|&v| v[0] == val).nth(0) { word.iter().for_each(|&c| rights.push(c)); } else { break; } } } if lefts.len() == length && rights.len() == length { println!("{}", lefts); return; } } println!("-1"); }