
import java.io.*;
import java.util.*;

// 2004 ACM Pacific Northwest Region Programming Contest
// Solution to Problem Four, Copyright 2005, all rights reserved
// Mark Holliday
// Western Carolina University
// Department of Mathematics and Computer Science
class Zipper
{
    BufferedReader br;
    StringTokenizer line = new StringTokenizer("");
    private String stringA;
    private String stringB;
    private String stringC;

    public Zipper()
    {
        try {
            br = new BufferedReader(new InputStreamReader(
                new FileInputStream(new File("C:\\holliday\\b.in"))));
        } catch (Exception e) {}
    }
    
    private void start()
    {
        try {
            line = new StringTokenizer(br.readLine());
        } catch (Exception e) {}
        int numDataSets = Integer.parseInt(line.nextToken());
        for (int i = 0; i < numDataSets; i++)
        {
            readOneDataSet();
            System.out.println("Data set " + i + ": " + analyzeDataSet());
        }
    }

    private void readOneDataSet()
    {
        try {
            line = new StringTokenizer(br.readLine());
        } catch (Exception e) {}
        this.stringA = line.nextToken();
        this.stringB = line.nextToken();
        this.stringC = line.nextToken();
    }
    
    private String analyzeDataSet()
    {
        if (stringA.length() + stringB.length() != stringC.length())
            return "no";
       return recAnalyze(0, 0, 0);
    }

    private String recAnalyze(int ptrA, int ptrB, int ptrC)
    {
        if (stringC.length() == ptrC)
            return "yes";
        else if ((ptrA < stringA.length()) && (ptrB == stringB.length()))
        {
            if (stringA.charAt(ptrA) == stringC.charAt(ptrC))
                return recAnalyze(ptrA + 1, ptrB, ptrC + 1);
            else 
                return "no";
        }
        else if ((ptrA == stringA.length()) && (ptrB < stringB.length()))
        {
            if (stringB.charAt(ptrB) == stringC.charAt(ptrC))
                return recAnalyze(ptrA, ptrB + 1, ptrC + 1);
            else 
                return "no";
        }
        else if ((stringA.charAt(ptrA) != stringC.charAt(ptrC)) && 
            (stringB.charAt(ptrB) != stringC.charAt(ptrC)))
            return "no";
        else if ((stringA.charAt(ptrA) == stringC.charAt(ptrC)) && 
            (stringB.charAt(ptrB) != stringC.charAt(ptrC)))
            return recAnalyze(ptrA + 1, ptrB, ptrC + 1);
        else if ((stringA.charAt(ptrA) != stringC.charAt(ptrC)) && 
            (stringB.charAt(ptrB) == stringC.charAt(ptrC)))
            return recAnalyze(ptrA, ptrB + 1, ptrC + 1);
        else if (recAnalyze(ptrA + 1, ptrB, ptrC + 1).equals("yes") 
            || recAnalyze(ptrA, ptrB + 1, ptrC + 1).equals("yes"))
            return "yes";
        else
            return "no";
    }        
            
    public static void main(String[] args)
    {
        (new Zipper()).start();
    }
}
			
