#[allow(unused_imports)]
use std::io::{BufWriter, stdin, stdout, Write};
#[derive(Default)]
struct Scanner { buf: Vec<String> }
impl Scanner {
fn next<T: std::str::FromStr>(&mut self) -> T {
loop {
if let Some(tok) = self.buf.pop() {
return tok.parse().ok().unwrap();
}
let mut s = String::new();
stdin().read_line(&mut s).unwrap();
self.buf = s.split_whitespace().rev().map(String::from).collect();
}
}
}
#[allow(unused_variables)]
macro_rules! io_init { ($scan:ident,$out:ident) => {
let mut $scan = Scanner::default();
let $out = &mut BufWriter::new(stdout());
}}
macro_rules! read { ($scan:ident, $($v:pat => $t:ty),*) => { $(let $v = $scan.next::<$t>();)* }; }
fn work(mat: &mut Vec<Vec<u64>>, m: usize, k: usize, kk: usize) {
let mut row = 0;
for i in 0..k {
let block = i >> 6;
let bit = i & 63;
let mut found = false;
for o in row..m {
if (mat[o][block] >> bit) & 1 == 1 {
mat.swap(row, o);
found = true;
break;
}
}
if !found { continue; }
for o in 0..m {
if o != row {
if (mat[o][block] >> bit) & 1 == 1 {
for q in 0..kk {
mat[o][q] ^= mat[row][q];
}
}
}
}
row += 1;
}
}
fn solve(scan: &mut Scanner, out: &mut BufWriter<std::io::Stdout>) {
read!(scan, t => usize);
for _ in 0..t {
read!(scan, n => usize);
let s = scan.next::<String>();
let tt = scan.next::<String>();
let mut k = n;
let mut m = 1;
while k % 2 == 0 {
m *= 2;
k /= 2;
}
let kk = ((k - 1) >> 6) + 1;
let mut a = vec![vec![0u64; kk]; m];
let mut b = vec![vec![0u64; kk]; m];
for i in 0..m {
for j in 0..k {
if s.as_bytes()[i*k + j] == b'1' {
a[i][j>>6] |= 1u64 << (j & 63);
}
if tt.as_bytes()[i*k + j] == b'1' {
b[i][j>>6] |= 1u64 << (j & 63);
}
}
}
work(&mut a, m, k, kk);
work(&mut b, m, k, kk);
if a == b {
writeln!(out, "Yes").unwrap();
} else {
writeln!(out, "No").unwrap();
}
}
}
fn main() {
io_init!(scan, out);
solve(&mut scan, out);
}
I1thbGxvdyh1bnVzZWRfaW1wb3J0cyldCnVzZSBzdGQ6OmlvOjp7QnVmV3JpdGVyLCBzdGRpbiwgc3Rkb3V0LCBXcml0ZX07CiNbZGVyaXZlKERlZmF1bHQpXQpzdHJ1Y3QgU2Nhbm5lciB7IGJ1ZjogVmVjPFN0cmluZz4gfQppbXBsIFNjYW5uZXIgewogICAgZm4gbmV4dDxUOiBzdGQ6OnN0cjo6RnJvbVN0cj4oJm11dCBzZWxmKSAtPiBUIHsKICAgICAgICBsb29wIHsKICAgICAgICAgICAgaWYgbGV0IFNvbWUodG9rKSA9IHNlbGYuYnVmLnBvcCgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0b2sucGFyc2UoKS5vaygpLnVud3JhcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxldCBtdXQgcyA9IFN0cmluZzo6bmV3KCk7CiAgICAgICAgICAgIHN0ZGluKCkucmVhZF9saW5lKCZtdXQgcykudW53cmFwKCk7CiAgICAgICAgICAgIHNlbGYuYnVmID0gcy5zcGxpdF93aGl0ZXNwYWNlKCkucmV2KCkubWFwKFN0cmluZzo6ZnJvbSkuY29sbGVjdCgpOwogICAgICAgIH0KICAgIH0KfQojW2FsbG93KHVudXNlZF92YXJpYWJsZXMpXQptYWNyb19ydWxlcyEgaW9faW5pdCB7ICgkc2NhbjppZGVudCwkb3V0OmlkZW50KSA9PiB7CiAgICBsZXQgbXV0ICRzY2FuID0gU2Nhbm5lcjo6ZGVmYXVsdCgpOwogICAgbGV0ICRvdXQgPSAmbXV0IEJ1ZldyaXRlcjo6bmV3KHN0ZG91dCgpKTsKfX0KbWFjcm9fcnVsZXMhIHJlYWQgeyAoJHNjYW46aWRlbnQsICQoJHY6cGF0ID0+ICR0OnR5KSwqKSA9PiB7ICQobGV0ICR2ID0gJHNjYW4ubmV4dDo6PCR0PigpOykqIH07IH0KCmZuIHdvcmsobWF0OiAmbXV0IFZlYzxWZWM8dTY0Pj4sIG06IHVzaXplLCBrOiB1c2l6ZSwga2s6IHVzaXplKSB7CiAgICBsZXQgbXV0IHJvdyA9IDA7CiAgICBmb3IgaSBpbiAwLi5rIHsKICAgICAgICBsZXQgYmxvY2sgPSBpID4+IDY7CiAgICAgICAgbGV0IGJpdCA9IGkgJiA2MzsKICAgICAgICBsZXQgbXV0IGZvdW5kID0gZmFsc2U7CiAgICAgICAgZm9yIG8gaW4gcm93Li5tIHsKICAgICAgICAgICAgaWYgKG1hdFtvXVtibG9ja10gPj4gYml0KSAmIDEgPT0gMSB7CiAgICAgICAgICAgICAgICBtYXQuc3dhcChyb3csIG8pOwogICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgIWZvdW5kIHsgY29udGludWU7IH0KICAgICAgICBmb3IgbyBpbiAwLi5tIHsKICAgICAgICAgICAgaWYgbyAhPSByb3cgewogICAgICAgICAgICAgICAgaWYgKG1hdFtvXVtibG9ja10gPj4gYml0KSAmIDEgPT0gMSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIHEgaW4gMC4ua2sgewogICAgICAgICAgICAgICAgICAgICAgICBtYXRbb11bcV0gXj0gbWF0W3Jvd11bcV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJvdyArPSAxOwogICAgfQp9CgpmbiBzb2x2ZShzY2FuOiAmbXV0IFNjYW5uZXIsIG91dDogJm11dCBCdWZXcml0ZXI8c3RkOjppbzo6U3Rkb3V0PikgewogICAgcmVhZCEoc2NhbiwgdCA9PiB1c2l6ZSk7CiAgICBmb3IgXyBpbiAwLi50IHsKICAgICAgICByZWFkIShzY2FuLCBuID0+IHVzaXplKTsKICAgICAgICBsZXQgcyA9IHNjYW4ubmV4dDo6PFN0cmluZz4oKTsKICAgICAgICBsZXQgdHQgPSBzY2FuLm5leHQ6OjxTdHJpbmc+KCk7CiAgICAgICAgbGV0IG11dCBrID0gbjsKICAgICAgICBsZXQgbXV0IG0gPSAxOwogICAgICAgIHdoaWxlIGsgJSAyID09IDAgewogICAgICAgICAgICBtICo9IDI7CiAgICAgICAgICAgIGsgLz0gMjsKICAgICAgICB9CiAgICAgICAgbGV0IGtrID0gKChrIC0gMSkgPj4gNikgKyAxOwogICAgICAgIGxldCBtdXQgYSA9IHZlYyFbdmVjIVswdTY0OyBra107IG1dOwogICAgICAgIGxldCBtdXQgYiA9IHZlYyFbdmVjIVswdTY0OyBra107IG1dOwogICAgICAgIGZvciBpIGluIDAuLm0gewogICAgICAgICAgICBmb3IgaiBpbiAwLi5rIHsKICAgICAgICAgICAgICAgIGlmIHMuYXNfYnl0ZXMoKVtpKmsgKyBqXSA9PSBiJzEnIHsKICAgICAgICAgICAgICAgICAgICBhW2ldW2o+PjZdIHw9IDF1NjQgPDwgKGogJiA2Myk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiB0dC5hc19ieXRlcygpW2kqayArIGpdID09IGInMScgewogICAgICAgICAgICAgICAgICAgIGJbaV1baj4+Nl0gfD0gMXU2NCA8PCAoaiAmIDYzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB3b3JrKCZtdXQgYSwgbSwgaywga2spOwogICAgICAgIHdvcmsoJm11dCBiLCBtLCBrLCBrayk7CiAgICAgICAgaWYgYSA9PSBiIHsKICAgICAgICAgICAgd3JpdGVsbiEob3V0LCAiWWVzIikudW53cmFwKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd3JpdGVsbiEob3V0LCAiTm8iKS51bndyYXAoKTsKICAgICAgICB9CiAgICB9Cn0KCmZuIG1haW4oKSB7CiAgICBpb19pbml0IShzY2FuLCBvdXQpOwogICAgc29sdmUoJm11dCBzY2FuLCBvdXQpOwp9Cg==