#![allow(dead_code, unused_imports)] use std::cmp::{max, min}; use std::collections::{HashMap, HashSet, VecDeque}; use std::io::{BufRead, BufReader, BufWriter, Stdin, Stdout, Write, stdin, stdout}; use std::mem::swap; pub struct Scanner { reader: R, buffer: Vec, } impl Scanner { pub fn new(reader: R) -> Self { Self { reader, buffer: Vec::new(), } } pub fn cin(&mut self) -> T { loop { if let Some(token) = self.buffer.pop() { return token.parse().ok().expect("Failed to parse"); } let mut input = String::new(); self.reader.read_line(&mut input).expect("Failed to read"); self.buffer = input.split_whitespace().rev().map(String::from).collect(); } } } fn solve(scan: &mut Scanner, out: &mut BufWriter) { let n = scan.cin::(); let mut a = (0..n).map(|i| (scan.cin::(), i)).collect::>(); let b = (0..n).map(|_| scan.cin::()).collect::>(); let mut ans = vec![0; n]; let mut j = 0; a.sort_unstable(); for a in a { if b[j] > a.0 { ans[a.1] = 1; j += 1; } else { ans[a.1] = 0; } } for a in ans { write!(out, "{a}").ok(); } writeln!(out).ok(); } fn main() { let mut scan = Scanner::new(stdin().lock()); let mut out = BufWriter::new(stdout()); // let t = 1; let t = scan.cin::(); (1..=t).for_each(|_tt| { // write!(out, "Case {tt}: ").ok(); solve(&mut scan, &mut out); }); }