There is a binary string a of length n. In one operation, you can select any prefix of a with an equal number of 0 and 1 symbols. Then all symbols in the prefix are inverted: each 0 becomes 1 and each 1 becomes 0.

For example, suppose a=0111010000. 

  * In the first operation, we can select the prefix of length 8 since it has four 0's and four 1's: [01110100]00→ [10001011]00. 
  * In the second operation, we can select the prefix of length 2 since it has one 0 and one 1: [10]00101100→ [01]00101100. 
  * It is illegal to select the prefix of length 4 for the third operation, because it has three 0's and one 1. 



Can you transform the string a into the string b using some finite number of operations (possibly, none)?

Input

The first line contains a single integer t (1≤ t≤ 10^4) — the number of test cases.

The first line of each test case contains a single integer n (1≤ n≤ 3⋅ 10^5) — the length of the strings a and b.

The following two lines contain strings a and b of length n, consisting of symbols 0 and 1.

The sum of n across all test cases does not exceed 3⋅ 10^5.

Output

For each test case, output "YES" if it is possible to transform a into b, or "NO" if it is impossible. You can print each letter in any case (upper or lower).

Example

Input


5
10
0111010000
0100101100
4
0000
0000
3
001
000
12
010101010101
100110011010
6
000111
110100


Output


YES
YES
NO
YES
NO

Note

The first test case is shown in the statement.

In the second test case, we transform a into b by using zero operations.

In the third test case, there is no legal operation, so it is impossible to transform a into b.

In the fourth test case, here is one such transformation: 

  * Select the length 2 prefix to get 100101010101. 
  * Select the length 12 prefix to get 011010101010. 
  * Select the length 8 prefix to get 100101011010. 
  * Select the length 4 prefix to get 011001011010. 
  * Select the length 6 prefix to get 100110011010. 



In the fifth test case, the only legal operation is to transform a into 111000. From there, the only legal operation is to return to the string we started with, so we cannot transform a into b.
// Problem: B. Flip the Bits
// Contest: Codeforces - Codeforces Round #712 (Div. 2)
// URL: https://codeforces.com/contest/1504/problem/B
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;

#define boost ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#pragma GCC optimize("O2")

#define pb push_back
#define fi first
#define se second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define vi vector<int>  // vector of int-- vector<int>
#define vii vector<ii> // vector of pair-- vector<pair<int,int>>
#define endl '\n'
#define inf 1e18

typedef unsigned long long int lli;
typedef long long int ll;

vector<ll> ar[1000001];
ll vis[1000001],dis[1000001],level[1000001];

const int MAX_SIZE = 1000001;

vector<int >isprime(MAX_SIZE , true);
vector<int >prime;
vector<int >SPF(MAX_SIZE);

void manipulated_seive(int N) {
    isprime[0] = isprime[1] = false ;
    for (int i=2; i<N ; ++i) {
        if (isprime[i]){
            prime.push_back(i);
            SPF[i] = i;
        }
        for (int j=0; j < (int)prime.size() && i*prime[j] < N && prime[j] <= SPF[i];++j) {
            isprime[i*prime[j]]=false;
            SPF[i*prime[j]] = prime[j] ;
        }
    }
}

bool sortbysec(const pair<int,int> &a,const pair<int,int> &b){return (a.second < b.second);}
//sort(v.begin(), v.end(), sortbysec);

unordered_map<ll,ll> myp;

void primeFactors(ll n) {
    while (n % 2 == 0){
        myp[2]++;
        n = n/2;
    }
    for (ll i = 3; i <= sqrt(n); i = i + 2){
        while (n % i == 0) {
            myp[i]++;
            n = n/i;
        }
    }
    if (n > 2)
        myp[n]++;
}

ll gcd(ll a, ll b){if (b == 0)return a;return gcd(b, a % b);}
ll findlcm(ll a, ll b){return a*b/gcd(a,b);}

void fun(){
	ll n;
	cin>>n;
	string a,b;
	cin>>a>>b;
	if(a==b){
		cout<<"YES"<<endl;
		return;
	}
	vector<ll> c0(n,0);
	vector<ll> c1(n,0);
	for(ll i=0;i<n;i++){
		if(a[i]=='0'){
			c0[i]++;
		}
		if(i!=0){
			c0[i]+=c0[i-1];
		}
		if(a[i]=='1'){
			c1[i]++;
		}
		if(i!=0){
			c1[i]+=c1[i-1];
		}
	}
	ll c=0;
	for(ll i=n-1;i>=0;i--){
		if(c==0 && a[i]!=b[i] && c0[i]==c1[i]){
			c++;
			a[i]=b[i];
		}
		else{
			if(c%2!=0){
				if(a[i]=='0'){
					a[i]='1';
				}
				else if(a[i]=='1'){
					a[i]='0';
				}
			}
			if(a[i]!=b[i] && c0[i]!=c1[i]){
				cout<<"NO"<<endl;
				return;
			}
			else if(a[i]==b[i]){
				continue;
			}
			else if(a[i]!=b[i] && c0[i]==c1[i]){
				c++;
				if(a[i]=='0'){
					a[i]='1';
				}
				else if(a[i]=='1'){
					a[i]='0';
				}
			}
		}
	}
	if(a==b){
		cout<<"YES"<<endl;
		return;
	}
	cout<<"NO"<<endl;
	return;
}

int main(){
    boost
    lli t;
    cin>>t;
    while(t--){
        cout<<fixed;
    	cout<<setprecision(10);
        fun();
    }
    return 0;
}
