// Author: @Drydock
use std::io::{self, Read};
fn main() {
solve();
}
fn solve() {
let mut input = String::new();
io::stdin().read_to_string(&mut input).unwrap();
let mut it = I::new(&input);
let t: usize = it.n();
let mut o = String::new();
for _ in 0..t {
let n: usize = it.n();
let s = it.s();
let p = it.s();
if s == p {
o.push_str("YES\n");
continue;
}
if n == 1 {
o.push_str("NO\n");
continue;
}
if n == 2 {
if p == b"01" || p == b"10" {
o.push_str("YES\n");
} else {
o.push_str("NO\n");
}
continue;
}
let mut a0 = false;
let mut a1 = false;
let mut b0 = false;
let mut b1 = false;
for &c in s.iter() {
if c == b'0' { a0 = true; } else { a1 = true; }
}
for &c in p.iter() {
if c == b'0' { b0 = true; } else { b1 = true; }
}
if (a0 && a1) || (b0 && b1) {
o.push_str("YES\n");
} else {
o.push_str("NO\n");
}
}
print!("{}", o);
}
struct I<'a> {
w: std::str::SplitWhitespace<'a>,
}
impl<'a> I<'a> {
fn new(s: &'a str) -> Self {
Self { w: s.split_whitespace() }
}
fn n<T: std::str::FromStr>(&mut self) -> T {
self.w.next().unwrap().parse().ok().unwrap()
}
fn s(&mut self) -> Vec<u8> {
self.w.next().unwrap().as_bytes().to_vec()
}
}