Methodius received an email from his friend Polycarp. However, Polycarp's keyboard is broken, so pressing a key on it once may cause the corresponding symbol to appear more than once (if you press a key on a regular keyboard, it prints exactly one symbol).

For example, as a result of typing the word "hello", the following words could be printed: "hello", "hhhhello", "hheeeellllooo", but the following could not be printed: "hell", "helo", "hhllllooo".

Note, that when you press a key, the corresponding symbol must appear (possibly, more than once). The keyboard is broken in a random manner, it means that pressing the same key you can get the different number of letters in the result.

For each word in the letter, Methodius has guessed what word Polycarp actually wanted to write, but he is not sure about it, so he asks you to help him.

You are given a list of pairs of words. For each pair, determine if the second word could be printed by typing the first one on Polycarp's keyboard.

Input

The first line of the input contains one integer n (1 ≤ n ≤ 10^5) — the number of pairs to check. Further input contains n descriptions of pairs.

The first line of each description contains a single non-empty word s consisting of lowercase Latin letters. The second line of the description contains a single non-empty word t consisting of lowercase Latin letters. The lengths of both strings are not greater than 10^6.

It is guaranteed that the total length of all words s in the input is not greater than 10^6. Also, it is guaranteed that the total length of all words t in the input is not greater than 10^6.

Output

Output n lines. In the i-th line for the i-th pair of words s and t print YES if the word t could be printed by typing the word s. Otherwise, print NO.

Examples

Input


4
hello
hello
hello
helloo
hello
hlllloo
hello
helo


Output


YES
YES
NO
NO


Input


5
aa
bb
codeforces
codeforce
polycarp
poolycarpp
aaaa
aaaab
abcdefghijklmnopqrstuvwxyz
zabcdefghijklmnopqrstuvwxyz


Output


NO
NO
YES
NO
NO
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 Main7{

	static class Pair
		{ 
			String x="";
			int y; 
			char z;
			public Pair(String x,int y, char z) 
			{	 
				this.z=z;
				this.x = x; 
				this.y = y;
			}	 
		} 
		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.y>p2.y)
						{
							return 1;
						}
						else if(p1.y<p2.y)
						{
							return -1;
						}
						else
						{
							if(p1.z>p2.z)
							{
								return 1;
							}
							else
								return -1;
						}
					} 
				}); 
			}
			static void compare1(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.y>p2.y)
						{
							return 1;
						}
						else if(p1.y<p2.y)
						{
							return -1;
						}
						else
						{
							if(p1.z>p2.z)
							{
								return 1;
							}
							else
								return -1;
						}
					} 
				}); 
			} 
		}
		
	/*	static class pqcomparator implements Comparator<Pair>
		{
		                // for Ascending order of cgpa 
            public int compare(Pair s1, Pair s2) { 
                if (s1.x > s2.x) 
                    return -1; 
                else if (s1.x < s2.x) 
                    return 1; 
                return 0; 
                } 
        } 
		*/
		
		public static long pow(long a, long b)
		{
			long result=1;
			while(b>0)
			{
				if (b % 2 != 0)
				{
					result=(result*a)%mod;
					b--;
				} 
				a=(a*a)%mod;
				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)
				{
					TreeSet<Integer> arr=new TreeSet<Integer>();
					arr=graph.get(parent);
					visited[parent]=true;
					if(a[parent]==1)
					{
						flag=1;
					}
					if(a[parent]==2)
					{
						flag1=1;
					}
					if(flag==1 && flag1==1)
					{
						return;
					}
					Iterator itr=arr.iterator();
					while(itr.hasNext())
					{
						int num=(int)itr.next();
						if(visited[num]==false)
						{
							dfs(num,visited);
						}
					}
					x1x`
				}*/
			//	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 long[] sort(long[] a)
				{
					int n=a.length;
					ArrayList<Long> 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;
		
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
				public static void main(String args[])throws IOException
				{
				//	InputReader in=new InputReader(System.in);
				//	OutputWriter out=new OutputWriter(System.out);
				//	long a=pow(26,1000000005);
				    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
			//		ArrayList<Integer> ar4=new ArrayList<>();
				//	ArrayList<Integer> ar2=new ArrayList<>();
					
				//	ArrayList<Integer> ar1=new ArrayList<>();
			//		TreeSet<Integer> ts=new TreeSet<>();
			//		TreeSet<Long> ts1=new TreeSet<>();
				//	HashMap<Long,Integer> hash=new HashMap<>();
					HashMap<Integer,Integer> odd=new HashMap<Integer,Integer>();
					HashMap<Long,Integer> hash2=new HashMap<Long,Integer>();
				/*	boolean[] prime=new boolean[10000001];
					for(int i=2;i*i<=10000000;i++)
					{
						if(prime[i]==false)
						{
							for(int j=2*i;j<=10000000;j+=i)
							{
								prime[j]=true;
							}
						}
					}*/
					int t=i();
					while(t-->0)
					{
						String s1=s();
						String s2=s();
						int n=s1.length();
						char ch=s1.charAt(0);
						int count=0;
						ArrayList<Integer> ar1=new ArrayList<Integer>();
						ArrayList<Integer> ar3=new ArrayList<Integer>();
						ArrayList<Character> ar=new ArrayList<>();
						ArrayList<Character> ar2=new ArrayList<>();
						for(int i=1;i<n;i++)
						{
							if(ch==s1.charAt(i))
							{
								count++;
							}
							else
							{
								ar.add(s1.charAt(i-1));
								ar1.add(count);
								ch=s1.charAt(i);
								count=1;
							}
						}
						ar.add(s1.charAt(n-1));
						ar1.add(count);
						count=0;
						n=s2.length();
						char ch1=s2.charAt(0);
						for(int i=1;i<n;i++)
						{
							if(ch1==s2.charAt(i))
							{
								count++;
							}
							else
							{
								ar2.add(s2.charAt(i-1));
								ar3.add(count);
								ch1=s2.charAt(i);
								count=1;
							}
						}
						ar2.add(s2.charAt(n-1));
						ar3.add(count);
						if(ar.size()!=ar2.size())
						{
							pln("NO");
						}
						else
						{
							int ans=0;
							int flag=0;
							for(int i=0;i<ar.size();i++)
							{
								if(ar.get(i)==ar2.get(i))
								{
									if(ar1.get(i)<=ar3.get(i))
									{
										ans++;
									}
									else
									{
										flag=1;
										break;
									}
								}
								else
								{
									flag=1;
									break;
								}
							}
							if(flag==1)
								pln("NO");
							else
								pln("YES");
						}
					}
				}
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				/**/
				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;
				}
			 
				} 