You are given two binary strings x and y, which are binary representations of some two integers (let's denote these integers as f(x) and f(y)). You can choose any integer k ≥ 0, calculate the expression s_k = f(x) + f(y) ⋅ 2^k and write the binary representation of s_k in reverse order (let's denote it as rev_k). For example, let x = 1010 and y = 11; you've chosen k = 1 and, since 2^1 = 10_2, so s_k = 1010_2 + 11_2 ⋅ 10_2 = 10000_2 and rev_k = 00001.

For given x and y, you need to choose such k that rev_k is lexicographically minimal (read notes if you don't know what does "lexicographically" means).

It's guaranteed that, with given constraints, k exists and is finite.

Input

The first line contains a single integer T (1 ≤ T ≤ 100) — the number of queries.

Next 2T lines contain a description of queries: two lines per query. The first line contains one binary string x, consisting of no more than 10^5 characters. Each character is either 0 or 1.

The second line contains one binary string y, consisting of no more than 10^5 characters. Each character is either 0 or 1.

It's guaranteed, that 1 ≤ f(y) ≤ f(x) (where f(x) is the integer represented by x, and f(y) is the integer represented by y), both representations don't have any leading zeroes, the total length of x over all queries doesn't exceed 10^5, and the total length of y over all queries doesn't exceed 10^5.

Output

Print T integers (one per query). For each query print such k that rev_k is lexicographically minimal.

Example

Input


4
1010
11
10001
110
1
1
1010101010101
11110000


Output


1
3
0
0

Note

The first query was described in the legend.

In the second query, it's optimal to choose k = 3. The 2^3 = 1000_2 so s_3 = 10001_2 + 110_2 ⋅ 1000_2 = 10001 + 110000 = 1000001 and rev_3 = 1000001. For example, if k = 0, then s_0 = 10111 and rev_0 = 11101, but rev_3 = 1000001 is lexicographically smaller than rev_0 = 11101.

In the third query s_0 = 10 and rev_0 = 01. For example, s_2 = 101 and rev_2 = 101. And 01 is lexicographically smaller than 101.

The quote from Wikipedia: "To determine which of two strings of characters comes when arranging in lexicographical order, their first letters are compared. If they differ, then the string whose first letter comes earlier in the alphabet comes before the other string. If the first letters are the same, then the second letters are compared, and so on. If a position is reached where one string has no more letters to compare while the other does, then the first (shorter) string is deemed to come first in alphabetical order."
    import java.io.BufferedWriter;
    	import java.io.IOException;
    	import java.io.InputStream;
    	import java.io.OutputStream;
    	import java.io.OutputStreamWriter;
    	import java.io.PrintWriter;
    	import java.io.Writer;
    	import java.util.Arrays;
    	import java.util.InputMismatchException;
    	import java.util.*;
    	import java.io.*;
    	import java.math.*;
    	public class Main6{
     
    	static class Pair
    		{ 
    			int x;
    			int y;
    			public Pair(int x,int y) 
    			{	 
    				this.x= x; 
    				this.y= y;
    			}	 
				
			@Override
					public int hashCode() 
					{ 
						final int temp = 14; 
						int ans = 1; 
						ans =x*31+y*13; 
						return ans; 
					} 
			  
					// Equal objects must produce the same 
					// hash code as long as they are equal 
				@Override
				public boolean equals(Object o) 
				{ 
					if (this == o) { 
						return true; 
					} 
					if (o == null) { 
						return false; 
					} 
					if (this.getClass() != o.getClass()) { 
						return false; 
					} 
					Pair other = (Pair)o; 
					if (this.x != other.x || this.y!=other.y) { 
						return false; 
					} 
					return true; 
				} 
					
    		} 
    		static class Pair1
    		{
    			String x;
    			int y;
    			int z;
    			
    		}
    		static class Compare
    		{ 
    			/*static void compare(Pair arr[], int n) 
    			{ 
    				// Comparator to sort the pair according to second element 
    				Arrays.sort(arr, new Comparator<Pair>() { 
    					@Override public int compare(Pair p1, Pair p2) 
    					{ 
    						if(p1.start>p2.start)
    						{
    							return 1;
    						}
    						else if(p1.start==p2.start)
    						{
    							return 0;
    						}
    						else
    						{
    							return -1;
    						}
    					} 
    				}); 
    			}
    			*/
    		}
    		
    		
    		public static long pow(long a, long b)
    		{
    			long result=1;
    			while(b>0)
    			{
    				if (b % 2 != 0)
    				{
    					result=(result*a)%998244353;
    					b--;
    				} 
    				a=(a*a)%998244353;
    				b /= 2;
    			}   
    			return result;
    		}
    		public static long fact(long num)
    		{
    					long value=1;
    					int i=0;
    					for(i=2;i<num;i++)
    					{
    						value=((value%mod)*i%mod)%mod;
    					}
    					return value;
    				}
    				public static int gcd(int a, int b)
    				{
    					if (a == 0)
    						return b;
    					return gcd(b%a, a);
    				}
    				
    		/*		public static long lcm(long a,long b)
    				{
    					return a * (b / gcd(a, b));
    				}
    			*/	public static long sum(int h)
    				{
    					return (h*(h+1)/2);
    				}
    				public static void dfs(int parent,boolean[] visited,int[] dp)
    				{
    					ArrayList<Integer> arr=new ArrayList<Integer>();
    					arr=graph.get(parent);
    					visited[parent]=true;
    					for(int i=0;i<arr.size();i++)
    					{
    						int num=(int)arr.get(i);
    						if(visited[num]==false)
    						{
    							dfs(num,visited,dp);
							}
							dp[parent]=Math.max(dp[num]+1,dp[parent]);
    					}
    				}
    			//	static int flag1=0;
    				static int[] dis;
    				static int mod=1000000007;
    				static ArrayList<ArrayList<Integer>> graph;
    				
    				public static void bfs(int num,int size)
    				{
    					boolean[] visited=new boolean[size+1];
    					Queue<Integer> q=new LinkedList<>();
    					q.add(num);
    					ans[num]=1;
    					visited[num]=true;
    					while(!q.isEmpty())
    					{
    						int x=q.poll();
    						ArrayList<Integer> al=graph.get(x);
    						for(int i=0;i<al.size();i++)
    						{
    							int y=al.get(i);	
    							if(visited[y]==false)
    							{
    								q.add(y);
    								ans[y]=ans[x]+1;
    								visited[y]=true;
    							}
    						}
    					}
    				}
    				static int[] ans;
    				
    				
    				
    				
    				
    				
    				
    				
    				
    			//	static int[] a;			  
    				
    				public static int[] sort(int[] a)
    				{
    					int n=a.length;
    					ArrayList<Integer> ar=new ArrayList<>();
    					for(int i=0;i<a.length;i++)
    					{
    						ar.add(a[i]);
    					}
    					Collections.sort(ar);
    					for(int i=0;i<n;i++)
    					{
    						a[i]=ar.get(i);
    					}
    					return a;
    				}
    			//	static int flag=1;
    		
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    			
    				static public void main(String args[])throws IOException
    				{
    		//		    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    			/*		boolean[] prime=new boolean[1101];
    					for(int i=2;i*i<=1100;i++)
    					{
    						if(prime[i]==false)
    						{
    							for(int j=2*i;j<=1100;j+=i)
    							{
    								prime[j]=true;
    							}
    						}
    					}*/
						int t=i();
						while(t-->0)
						{
							String s=s();
							String s1=s();
							int n=s.length();
							int n1=s1.length();
							ArrayList<Integer> ar=new ArrayList<>();
							for(int i=n-1;i>=0;i--)
							{
								if(s.charAt(i)=='1')
									ar.add(i);
							}
							int count=0;
							int index=0;
							for(int i=n1-1;i>=0;i--)
							{
								if(s1.charAt(i)=='1')
								{
									index=count;
									break;
								}
								count++;
							}
							int ans=0;
							int count1=0;
						//	pln(count+"");
							for(int i=n-1;i>=0;i--)
							{
								if(s.charAt(i)=='1' && count1>=index)
								{
									ans=count1-index;
									break;
								}
								count1++;
							}
							pln(ans+"");
						}
					}
					
    				
    	
    					
    				
    				
    				
    				
    				
    				
    				
    				
    				
    				
    				
    				
    				
    				/**/
    				static InputReader in=new InputReader(System.in);
    					static OutputWriter out=new OutputWriter(System.out);
    					public static long l()
    					{
    						String s=in.String();
    						return Long.parseLong(s);
    					}
    					public static void pln(String value)
    					{
    						System.out.println(value);
    					}
    					public static int i()
    					{
    						return in.Int();
    					}
    					public static String s()
    					{
    						return in.String();
    					}
    		}
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			 
    			class InputReader {
    				 
    				private InputStream stream;
    				private byte[] buf = new byte[1024];
    				private int curChar;
    				private int numChars;
    				private SpaceCharFilter filter;
    			 
    				public InputReader(InputStream stream) {
    					this.stream = stream;
    				}
    			 
    				public int read() {
    					if (numChars== -1)
    						throw new InputMismatchException();
    					if (curChar >= numChars) {
    						curChar = 0;
    						try {
    							numChars = stream.read(buf);
    						} catch (IOException e) {
    							throw new InputMismatchException();
    						}
    						if (numChars <= 0)
    							return -1;
    					}
    					return buf[curChar++];
    				}
    			 
    				public int Int() {
    					int c = read();
    					while (isSpaceChar(c))
    						c = read();
    					int sgn = 1;
    					if (c == '-') {
    						sgn = -1;
    						c = read();
    					}
    					int res = 0;
    					do {
    						if (c < '0' || c > '9')
    							throw new InputMismatchException();
    						res *= 10;
    						res += c - '0';
    						c = read();
    					} while (!isSpaceChar(c));
    					return res * sgn;
    				}
    			 
    				public String String() {
    					int c = read();
    					while (isSpaceChar(c))
    						c = read();
    					StringBuilder res = new StringBuilder();
    					do {
    						res.appendCodePoint(c);
    						c = read();
    					} while (!isSpaceChar(c));
    					return res.toString();
    				}
    			 
    				public boolean isSpaceChar(int c) {
    					if (filter != null)
    						return filter.isSpaceChar(c);
    					return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
    				}
    			 
    				public String next() {
    					return String();
    				}
    			 
    				public interface SpaceCharFilter {
    					public boolean isSpaceChar(int ch);
    				}
    			}
    			 
    			class OutputWriter {
    				private final PrintWriter writer;
    			 
    				public OutputWriter(OutputStream outputStream) {
    					writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
    				}
    			 
    				public OutputWriter(Writer writer) {
    					this.writer = new PrintWriter(writer);
    				}
    			 
    				public void print(Object...objects) {
    					for (int i = 0; i < objects.length; i++) {
    						if (i != 0)
    							writer.print(' ');
    						writer.print(objects[i]);
    					}
    				}
    			 
    				public void printLine(Object...objects) {
    					print(objects);
    					writer.println();
    				}
    			 
    				public void close() {
    					writer.close();
    				}
    			 
    				public void flush() {
    					writer.flush();
    				}
    			 
    				}
    			 
    				class IOUtils {
    			 
    				public static int[] readIntArray(InputReader in, int size) {
    					int[] array = new int[size];
    					for (int i = 0; i < size; i++)
    						array[i] = in.Int();
    					return array;
    				}
    			 
    				} 