Monocarp is playing a computer game. Now he wants to complete the first level of this game.

A level is a rectangular grid of 2 rows and n columns. Monocarp controls a character, which starts in cell (1, 1) — at the intersection of the 1-st row and the 1-st column.

Monocarp's character can move from one cell to another in one step if the cells are adjacent by side and/or corner. Formally, it is possible to move from cell (x_1, y_1) to cell (x_2, y_2) in one step if |x_1 - x_2| ≤ 1 and |y_1 - y_2| ≤ 1. Obviously, it is prohibited to go outside the grid.

There are traps in some cells. If Monocarp's character finds himself in such a cell, he dies, and the game ends.

To complete a level, Monocarp's character should reach cell (2, n) — at the intersection of row 2 and column n.

Help Monocarp determine if it is possible to complete the level.

Input

The first line contains a single integer t (1 ≤ t ≤ 100) — the number of test cases. Then the test cases follow. Each test case consists of three lines.

The first line contains a single integer n (3 ≤ n ≤ 100) — the number of columns.

The next two lines describe the level. The i-th of these lines describes the i-th line of the level — the line consists of the characters '0' and '1'. The character '0' corresponds to a safe cell, the character '1' corresponds to a trap cell.

Additional constraint on the input: cells (1, 1) and (2, n) are safe.

Output

For each test case, output YES if it is possible to complete the level, and NO otherwise.

Example

Input


4
3
000
000
4
0011
1100
4
0111
1110
6
010101
101010


Output


YES
YES
NO
YES

Note

Consider the example from the statement.

In the first test case, one of the possible paths is (1, 1) → (2, 2) → (2, 3).

In the second test case, one of the possible paths is (1, 1) → (1, 2) → (2, 3) → (2, 4).

In the fourth test case, one of the possible paths is (1, 1) → (2, 2) → (1, 3) → (2, 4) → (1, 5) → (2, 6).
1
9
000000010
000000000
 1
9
000000010
000100000
 1
60
000000000000000000000000000000000000000000000000000000000010
000000000000000000000000000000000000000000000000000000000010

YES
 YES
 NO

import java.util.*;
import java.io.*;
import java.math.BigInteger;

public class _practise {
	
	static class FastReader
	{ 
		
		BufferedReader br; 
		StringTokenizer st; 

		public FastReader() 
		{ 
			br = new BufferedReader(new InputStreamReader(System.in)); 
		} 

		String next() 
		{ 
			while (st == null || !st.hasMoreElements()) 
			{ 
				try
				{ 
					st = new StringTokenizer(br.readLine()); 
				} 
				catch (IOException  e) 
				{ 
					e.printStackTrace(); 
				} 
			} 
			return st.nextToken(); 
		} 

		int nextInt() 
		{ 
			return Integer.parseInt(next()); 
		} 

		long nextLong() 
		{ 
			return Long.parseLong(next()); 
		} 

		double nextDouble() 
		{ 
			return Double.parseDouble(next()); 
		} 

		 int[] ia(int n)
		{
			int a[]=new int[n];
			for(int i=0;i<n;i++)a[i]=nextInt();
			return a;
		}
		 int[][] ia(int n , int m)
			{
				int a[][]=new int[n][m];
				for(int i=0;i<n;i++) for(int j=0;j<m ;j++) a[i][j]=nextInt();
				return a;
			}
		 long[][] la(int n , int m)
			{
				long a[][]=new long[n][m];
				for(int i=0;i<n;i++) for(int j=0;j<m ;j++) a[i][j]=nextLong();
				return a;
			}
		 char[][] ca(int n , int m)
			{
				char a[][]=new char[n][m];
				for(int i=0;i<n;i++)
					{
					String x =next();
					for(int j=0;j<m ;j++) a[i][j]=x.charAt(j);
					}
				return a;
			}

		long[] la(int n)
		{
			long a[]=new long[n];
			for(int i=0;i<n;i++)a[i]=nextLong();
			return a;
		}

		String nextLine() 
		{ 
			String str = ""; 
			try
			{ 
				str = br.readLine(); 
			} 
			catch (IOException e) 
			{ 
				e.printStackTrace(); 
			} 
			return str; 
		} 
	}
	static void sort(long[] a) 
	{int n=a.length;Random r=new Random();for (int i=0; i<a.length; i++) {long oi=r.nextInt(n), temp=a[i];a[i]=a[(int)oi];a[(int)oi]=temp;}Arrays.sort(a);}
    static void sort(int[] a) 
    {int n=a.length;Random r=new Random();for (int i=0; i<a.length; i++) {int oi=r.nextInt(n), temp=a[i];a[i]=a[oi];a[oi]=temp;}Arrays.sort(a);}
	public static long sum(long a[])
	{long sum=0; for(long i : a) sum+=i; return(sum);}
	public static long count(long a[] , long x)
	{long c=0; for(long i : a) if(i==x) c++; return(c);}
	public static int sum(int a[])
	{ int sum=0; for(int i : a) sum+=i; return(sum);}
	public static int count(int a[] ,int x)
	{int c=0; for(int i : a) if(i==x) c++; return(c);}
	public static int count(String s ,char ch)
	{int c=0; char x[] = s.toCharArray(); for(char i : x) if(ch==i) c++; return(c);}
	public static boolean prime(int n)
	{for(int i=2 ; i<=Math.sqrt(n) ; i++) if(n%i==0) return false; return true;}
	public static boolean prime(long n)
	{for(long i=2 ; i<=Math.sqrt(n) ; i++) if(n%i==0) return false; return true;}
	 public static int gcd(int n1, int n2)
	  { if (n2 != 0)return gcd(n2, n1 % n2); else return n1;}
	 public static long gcd(long n1, long n2)
	  { if (n2 != 0)return gcd(n2, n1 % n2); else return n1;}
	 public static int[] freq(int a[], int n)
	  { int f[]=new int[n+1]; for(int i:a) f[i]++; return f;}
	 public static int[] pos(int a[], int n)
	  { int f[]=new int[n+1]; for(int i=0; i<n ;i++) f[a[i]]=i; return f;}
	 
	
	 public static long mindig(long n)
	 {
		 long ans=9; while(n>0) { if(n%10<ans) ans=n%10; n/=10; }
		 return ans;
	 }
	 public static long maxdig(long n)
	 {
		 long ans=0; while(n>0) { if(n%10>ans) ans=n%10; n/=10; }
		 return ans;
	 }
	  
	public static boolean palin(String s)
	{
		StringBuilder sb = new StringBuilder();
		sb.append(s);
		String str=String.valueOf(sb.reverse());
		if(s.equals(str))
			return true;
		else return false;
	}
	
	public static void main(String args[])
	{

		FastReader in=new FastReader();
		PrintWriter so = new PrintWriter(new BufferedWriter(new  OutputStreamWriter(System.out)));
		_practise ob = new _practise();
		
	    
		int T = in.nextInt();		
		//int T = 1;		
	     tc : while(T-->0)
		 { 	
	    	int n = in.nextInt();
	    	char ch[][] = in.ca(2, n);
	    	boolean a[][] = new boolean[2][n];
	    	
	    	
	    	
		 }
		
		so.flush();
		/*String s = in.next();
		 * Arrays.stream(f).min().getAsInt()
		 * BigInteger f = new BigInteger("1"); 1 ke jagah koi bhi value ho skta jo aap 
		 *                                       initial value banan chahte
			int a[] = new int[n];
			 Stack<Integer> stack = new Stack<Integer>();
			Deque<Integer> q = new LinkedList<>(); or Deque<Integer> q = new ArrayDeque<Integer>();
			PriorityQueue<Long> pq = new PriorityQueue<Long>();
			ArrayList<Integer> al = new ArrayList<Integer>(); 
			StringBuilder sb = new StringBuilder();
			HashSet<Integer> st = new LinkedHashSet<Integer>();
			Set<Integer> s = new HashSet<Integer>();
			Map<Long,Integer> hm = new HashMap<Long, Integer>(); //<key,value>
			 for(Map.Entry<Integer, Integer> i :hm.entrySet())
			HashMap<Integer, Integer> hmap = new HashMap<Integer, Integer>();
			so.println("HELLO");
			Arrays.sort(a,Comparator.comparingDouble(o->o[0]))
			 Arrays.sort(a, (aa, bb) -> Integer.compare(aa[1], bb[1]));
			 Set<String> ts = new TreeSet<>();*/
	}
}