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 s = String::new(); std::io::stdin().read_line(&mut s).ok(); let s = s.trim(); s.to_string() }) .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 s = String::new(); std::io::stdin().read_line(&mut s).ok(); let s = s.trim(); s.to_string() }) .collect::>(); let limit = a.iter().map(|c| c.len()).sum::(); for i in 0..n { let mut yuki = a[i].clone().to_owned(); let mut coder = String::new(); while yuki.len() < limit || coder.len() < limit { if yuki.len() == coder.len() { break; } else if yuki.len() < coder.len() { if let Some(idx) = (0..n).filter(|&j| a[j].starts_with(coder.chars().nth(yuki.len()).unwrap())).nth(0) { yuki.push_str(&a[idx]); } else { break; } } else { if let Some(idx) = (0..m).filter(|&j| b[j].starts_with(yuki.chars().nth(coder.len()).unwrap())).nth(0) { coder.push_str(&b[idx]); } else { break; } } } if yuki.len() == coder.len() && yuki.len() == limit { println!("{}", yuki); return; } } println!("-1"); }