RND = Random.new(2) read_line.to_i.times do solve() end def solve n = read_line.to_i r = read_line.split.map(&.to_i) c = read_line.split.map(&.to_i) if n == 1 puts 1 return end if n == 2 puts -1 return end a = Array.new(n) { |i| Array.new(n, r[i]) } cnt = Array.new(n, 0) 10.times do n.times { |i| a[i].fill(r[i]) } cnt.fill(0) cands = [] of Int32 n.times do |x| cands.clear n.times do |y| if a[y][x] != c[x] && cnt[y] + 1 < (n + 1) // 2 cands << y end end break if cands.empty? y = cands[RND.rand(cands.size)] a[y][x] = c[x] cnt[y] += 1 end break if cnt.sum == n end if cnt.sum == n a.each { |r| puts r.join(" ") } else puts -1 end end