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.
#include<bits/stdc++.h>
#define ll long long int
#define pi acos(-1)
#define FAST() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
using namespace std;

ll mod=1000000007;
bool sortBysec(pair<ll,ll>a,pair<ll,ll>b)
{
    return a.second<b.second;
}

bool prime[10000009];
vector<ll>vv;
void SieveOfEratosthenes(ll n)
{

    prime[2]=true;
    memset(prime, true, sizeof(prime));

    for (ll p=3; p*p<=n; p+=2)
    {

        if (prime[p] == true)
        {

            for (ll i=p*p; i<=n; i +=(2*p))
                prime[i] = false;
        }
    }

}


ll binExp(ll a,ll n)
{
    ll res=1;
    while(n)
    {
        if(n%2==1)
        {
            res=(res*a)%mod;
            n--;
        }
        else
        {
            a=(a*a)%mod;
            n=n/2;
        }
    }
    return res;
}

ll ncr(ll n,ll r)
{
    if(r>n-r)
    {
        r=n-r;
    }
    ll i,j,ans=1;
    for(i=n,j=1; j<=r; j++,i--)
    {
        ans=((ans*i)%mod);
        ans=(ans*binExp(j,mod-2))%mod;
    }
    return ans;
}

ll power(ll n,ll m)
{
    ll ans=1;
    while(m)
    {
        ans*=n;
        m--;
    }
    return ans;
}

ll digsum(ll n)
{
    ll sum=0;
    while(n)
    {
        sum+=n%10;
        n=n/10;
    }
    return sum;
}

ll fact(ll n)
{
    ll ans=1;
    for (ll i=1; i<=n; i++)
    {
        ans*=i;
    }
    return ans;
}
ll npr(ll n,ll r)
{
    ll ans=1;
    for(ll i=n,j=1; j<=r; j++,i--)
    {
        ans=((ans%mod)*(i%mod))%mod;
    }
    return ans;
}


ll bigmod(ll a,ll b)
{
    ll ans=1;
    for(ll i=1; i<=b; i++)
    {
        ans*=a;

    }
    return ans;
}
bool sortbysecTuple(const tuple<int, int, int>& a, const tuple<int, int, int>& b)
{
    return (get<1>(a) < get<1>(b));
}

int main()
{
    FAST();
    ll t=1,i=0,m,n,j,k,x,y,z,p,c,d,q,a,b,tt=0,r;
    cin>>t;

    while(t--)
    {
         string s1,s2;
         cin>>n;
         cin>>s1>>s2;
         if(s1==s2)
         {
             cout<<"YES"<<endl;
             continue;
         }
         ll c1=0,c0=0;
         p=0;
         ll f=0,f2=0;
         for(i=0;i<n;i++)
         {
             if(s1[i]=='0')
             {
                 c0++;
             }
             if(s1[i]=='1')
             {
                 c1++;
             }
             if(c1==c0)
             {
                 f2=1;
                 ll cnt=0;
                 for(j=p;j<=i;j++)
                 {
                     if(s1[j]==s2[j])
                     {
                        cnt++;
                     }

                 }
                 ll sz=i-p+1;
                 if(cnt==sz||cnt==0)
                 {
                     f=0;
                 }
                 else
                 {
                     f=1;
                     break;
                 }
                 p=i+1;
                 c1=0;
                 c0=0;

             }
         }
         for(j=p;j<n;j++)
         {
             if(s1[j]==s2[j])
             {
                 continue;
             }
             else
             {
                 f=1;
                 break;
             }
         }
         if(f==1||f2==0)
         {
             cout<<"NO"<<endl;
         }
         else
            cout<<"YES"<<endl;
    }

    return 0;

}
