package main
import (
"bufio"
"io"
"os"
"sort"
)
type Player struct {
a int
b int
idx int
}
func main() {
data, _ := io.ReadAll(os.Stdin)
p := 0
nextInt := func() int {
for p < len(data) && (data[p] < '0' || data[p] > '9') {
p++
}
x := 0
for p < len(data) && data[p] >= '0' && data[p] <= '9' {
x = x*10 + int(data[p]-'0')
p++
}
return x
}
t := nextInt()
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
for ; t > 0; t-- {
n := nextInt()
players := make([]Player, n)
for i := 0; i < n; i++ {
players[i].a = nextInt()
players[i].idx = i
}
for i := 0; i < n; i++ {
players[i].b = nextInt()
}
sort.Slice(players, func(i, j int) bool {
return players[i].a < players[j].a
})
sufMin := make([]int, n)
sufMin[n-1] = players[n-1].b
for i := n - 2; i >= 0; i-- {
if players[i].b < sufMin[i+1] {
sufMin[i] = players[i].b
} else {
sufMin[i] = sufMin[i+1]
}
}
start := 0
prefMax := players[0].b
for i := 0; i < n-1; i++ {
if players[i].b > prefMax {
prefMax = players[i].b
}
if prefMax < sufMin[i+1] {
start = i + 1
}
}
ans := make([]byte, n)
for i := 0; i < n; i++ {
ans[i] = '0'
}
for i := start; i < n; i++ {
ans[players[i].idx] = '1'
}
out.Write(ans)
out.WriteByte('\n')
}
}