/*

 * Noah Becker

 * acsl competition search

 * 2/8/11

 * period 2 CS1

 */

 

import java.util.Scanner;

import java.io.IOException;

import java.io.File;

import java.lang.String;

 

public class SearchClient

{    

      public static void main(String[] args) throws IOException

      {

            //connecting to the file

        String pathToFile = "Z:/CS1/Programs/Search";

        File inFile = new File(pathToFile, "search.txt");

        Scanner inData = new Scanner(inFile);

       

        //declaring variables

        String str1 = inData.next(), str2 = inData.next(), str3= inData.next(), str4= inData.next(), search, solution;

       

        inData.nextLine();

       

        //developing an algorithm to manipulate the input

        for(int start = 0; start <= 4; start++)

        {

            solution = "";

            search = inData.nextLine();

            if(search.startsWith("*") && !search.contains("?"))

                  solution = search(str1, str2, str3, str4, search, solution);

            else if(search.endsWith("*") && !search.contains("?"))

                  solution = search1(str1, str2, str3, str4, search, solution);

            else if(search.startsWith("?") && !search.endsWith("*"))

                  solution = search2(str1, str2, str3, str4, search, solution);

            else if(search.endsWith("?") && !search.startsWith("*"))

                  solution = search3(str1, str2, str3, str4, search, solution);

            else if(search.contains("?") && !search.startsWith("?") && !search.endsWith("?") && !search.contains("*"))

                  solution = search4(str1, str2, str3, str4, search, solution);

            else if(search.startsWith("?") && search.endsWith("*"))

                  solution = search5(str1, str2, str3, str4, search, solution);

            else if(search.startsWith("*") && search.endsWith("?"))

                  solution = search6(str1, str2, str3, str4, search, solution);

            else if(search.startsWith("*") && search.contains("?")&& !search.startsWith("?") && !search.endsWith("?"))

                  solution = search7(str1, str2, str3, str4, search, solution);

            else if(search.endsWith("*") && search.contains("?")&& !search.startsWith("?") && !search.endsWith("?"))

                  solution = search8(str1, str2, str3, str4, search, solution);

            printsearchresults(solution);

        }

      }

     

      //this method will find out what words are appropriate for a search that starts with an asterisk

      public static String search(String s1, String s2, String s3, String s4, String s, String so)

      {

            if(s1.endsWith(s.substring(1, s.length())))

                  so = s1;

            if(s2.endsWith(s.substring(1, s.length())))

                  so = (so + " " + s2);

            if(s3.endsWith(s.substring(1, s.length())))

                  so = (so + " " +s3);

            if(s4.endsWith(s.substring(1, s.length())))

                  so = (so + " " + s4);

            return so;

      }

     

      //this method will find out what words are appropriate for a search that ends with an asterisk

      public static String search1(String s1, String s2, String s3, String s4, String s, String so)

      {

            if(s1.startsWith(s.substring(0, s.length() - 1)))

                  so = s1;

            if(s2.startsWith(s.substring(0, s.length() - 1)))

                  so = (so + " " + s2);

            if(s3.startsWith(s.substring(0, s.length() - 1)))

                  so = (so + " " + s3);

            if(s4.startsWith(s.substring(0, s.length() - 1)))

                  so = (so + " " + s4);

            return so;

      }

     

      //this method will find out what words are appropriate for a search that starts with a ?

      public static String search2(String s1, String s2, String s3, String s4, String s, String so)

      {

            if(s1.substring(1, s1.length()).equals(s.substring(1, s.length())) && s1.length() == s.length())

                  so = s1;

            if(s2.substring(1, s2.length()).equals(s.substring(1, s.length()))&& s1.length() == s.length())

                  so = (so + " " + s2);

            if(s3.substring(1, s3.length()).equals(s.substring(1, s.length()))&& s1.length() == s.length())

                  so = (so + " " + s3);

            if(s4.substring(1, s4.length()).equals(s.substring(1, s.length()))&& s1.length() == s.length())

                  so = (so + " " + s4);

            return so;

      }

     

      //this method will find out what words are appropriate for a search that ends with a ?

      public static String search3(String s1, String s2, String s3, String s4, String s, String so)

      {

            if(s1.substring(0, s1.length() - 1).equals(s.substring(0, (s.length() - 1))) &&

                        s1.length() == s.length())

                  so = (s1);

            if(s2.substring(1, s2.length() - 1).equals(s.substring(0, (s.length() - 1))) &&

                        s2.length() == s.length())

                  so = (so + " " + s2);

            if(s1.substring(1, s3.length() - 1).equals(s.substring(0, (s.length() - 1))) &&

                        s3.length() == s.length())

                  so = (so + " " + s3);

            if(s1.substring(1, s4.length() - 1).equals(s.substring(0, (s.length() - 1))) &&

                        s4.length() == s.length())

                  so = (so + " " + s4);

            return so;

      }

     

      //this method will find out what words are appropriate for a search that has a ? in it

      public static String search4(String s1, String s2, String s3, String s4, String s, String so)

      {

            String s11 = s1;

            s1 = s1.replace(s1.substring(s.indexOf("?"), s.indexOf("?") + 1), "");

            String s22 = s2;

            s2 = s2.replace(s2.substring(s.indexOf("?"), s.indexOf("?") + 1), "");

            String s33 = s3;

            s3 = s3.replace(s3.substring(s.indexOf("?"), s.indexOf("?") + 1), "");

            String s44 = s4;

            s4 = s4.replace(s4.substring(s.indexOf("?"), s.indexOf("?") + 1), "");

            s = s.replace("?", "");

            if(s.equals(s1))

                  so = s11;

            if(s.equals(s2))

                  so = so + " " + s22;

            if(s.equals(s3))

                  so = so + " " + s33;

            if(s.equals(s4))

                  so = so + " "  + s44;

            return so;

      }

     

      //this method will find out what words are appropriate for a search that starts with a ? and ends with a *

      public static String search5(String s1, String s2, String s3, String s4, String s, String so)

      {

            if(s1.substring(1, (s.length() - 1)).equals(s.substring(1, (s.length() - 1))))

                  so = (s1);

            if(s2.substring(1, (s.length() - 1)).equals(s.substring(1, (s.length() - 1))))

                  so = (so + " " + s2);

            if(s3.substring(1, (s.length() - 1)).equals(s.substring(1, (s.length() - 1))))

                  so = (so + " " + s3);

            if(s4.substring(1, (s.length() - 1)).equals(s.substring(1, (s.length() - 1))))

                  so = (so + " " + s4);

            return so;

      }

     

      //this method will find out what words are appropriate for a search that ends with a ? and starts with a *

      public static String search6(String s1, String s2, String s3, String s4, String s, String so)

      {

            if(s1.length() >= s.length())

            {

                  if(s.substring(1, (s.length() - 1)).equals(s1.substring((s1.length() - (s.length() - 1)), (s1.length() - 1))))

                  so = (s1);

            }

            if(s2.length() >= s.length())

            {

                  if(s.substring(1, (s.length() - 1)).equals(s2.substring((s2.length() - (s.length() - 1)), (s2.length() - 1))))

                  so = (so + " " + s2);

            }

            if(s3.length() >= s.length())

            {

                  if(s3.length() >= s.length() && s.substring(1, (s.length() - 1)).equals(s3.substring((s3.length() - (s.length() - 1)), (s3.length() - 1))))

                  so = (so + " " + s3);

            }

            if(s4.length() >= s.length())

            {

                  if(s.substring(1, (s.length() - 1)).equals(s4.substring((s4.length() - (s.length() - 1)), (s4.length() - 1))))

                  so = (so + " " + s4);

            }

            return so;

      }

     

      //this method will find out what words are appropriate for a search that starts with a * and has a ? in it

      public static String search7(String s1, String s2, String s3, String s4, String s, String so)

      {

            String qM = "?";

            int strPos = s.indexOf(qM);

            if(s1.length() >= s.length())

                  {

                        if(s.substring(1, strPos).equals(s1.substring(s1.length() - (s.length()),

                                    (s1.length() - s.length() + (strPos - 1))))&& s.substring(strPos + 1, s.length())

                                    .equals(s1.substring((s1.length() - (s1.length() - s.length() + (strPos + 1))), s1.length())))

                              so = s1;

                  }

            if(s2.length() >= s.length())

            {

                  if(s.substring(1, strPos).equals(s2.substring(s2.length() - (s.length()),

                        (s2.length() - s.length() + (strPos - 1))))&& s.substring(strPos + 1, s.length())

                        .equals(s2.substring((s2.length() - (s2.length() - s.length() + (strPos + 1))), s2.length())))

                        so = (so + " " + s2);

            }

            if(s3.length() >= s.length())

            {

                  if(s.substring(1, strPos).equals(s3.substring(s3.length() - (s.length()),

                        (s3.length() - s.length() + (strPos - 1))))&& s.substring(strPos + 1, s.length())

                        .equals(s3.substring((s3.length() - (s3.length() - s.length() + (strPos + 1))), s3.length())))

                        so = (so + " " + s3);

            }

            if(s4.length() >= s.length())

            {

                  if(s.substring(1, strPos).equals(s4.substring(s4.length() - (s.length()),

                              (s4.length() - s.length() + (strPos - 1))))&& s.substring(strPos + 1, s.length())

                              .equals(s4.substring((s4.length() - (s4.length() - s.length() + (strPos + 1))), s4.length())))

                              so = (so + " " + s4);        

            }

                  return so;

      }

     

      //this method will find out what words are appropriate for a search that ends with a * and has a ? in it

      public static String search8(String s1, String s2, String s3, String s4, String s, String so)

      {

            String qM = "?";

            int strPos = s.indexOf(qM);

            if(s.substring(0, strPos).equals(s1.substring(0, strPos)) && s.substring(strPos + 1, s.length())

                        .equals(s1.substring(strPos + 1, s1.length() - (s1.length() - s.length()))))

                        so = s1;

            if(s.substring(0, strPos).equals(s2.substring(0, strPos)) && s.substring(strPos + 1, s.length())

                        .equals(s2.substring(strPos + 1, s2.length() - (s2.length() - s.length()))))

                        so = so + s2;

            if(s.substring(0, strPos).equals(s3.substring(0, strPos)) && s.substring(strPos + 1, s.length())

                        .equals(s3.substring(strPos + 1, s3.length() - (s3.length() - s.length()))))

                        so = so + s3;

            if(s.substring(0, strPos).equals(s4.substring(0, strPos)) && s.substring(strPos + 1, s.length())

                        .equals(s4.substring(strPos + 1, s4.length() - (s4.length() - s.length()))))

                        so = so + s4;

            return so;

      }

     

      //this method will print the results

      public static void printsearchresults(String s)

      {

            if(s.isEmpty())

                  System.out.println("No Match");

            else

                  System.out.println(s);

      }

}

/*

TEACH EACH PREACH

TEACH EACH PREACH

TEACH

No Match

 TEACHER

*/