use itertools::Itertools; use proconio::{fastout, input}; fn solve_small(n: usize, r: &[usize], c: &[usize]) -> Option>> { if n == 1 { return Some(vec![vec![r[0]]]); } if n == 2 { return None; } let mut ans = vec![vec![0; n]; n]; for i in 0..n { for j in 0..n { ans[i][j] = r[i]; } } for p in (0..n).permutations(n) { if (0..n).all(|i| c[i] != r[p[i]]) { for i in 0..n { ans[p[i]][i] = c[i]; } return Some(ans); } } None } fn solve() -> Option>> { input! { n: usize, r: [usize; n], c: [usize; n], } if n >= 5 { let mut ans = vec![vec![0; n]; n]; for i in 0..n { let mut j = i; for _ in 0..(n + 2) / 2 { ans[i][j] = r[i]; j += 1; j %= n; } } for j in 0..n { for i in 0..n { if ans[i][j] == 0 { ans[i][j] = c[j]; } } } return Some(ans); } else { return solve_small(n, &r, &c); } } #[fastout] fn main() { input! { t: usize, } for _ in 0..t { if let Some(ans) = solve() { for r in ans { println!("{}", r.iter().join(" ")); } } else { println!("-1"); } } }