import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Earthquake {
    static boolean sameFromBack(String toFind, String candidateStr) {
        for (int currChar = -1; currChar < -8; currChar--) {
            if (toFind.charAt(currChar) == '*') {
                return true;
            }

            if (toFind.charAt(currChar) != candidateStr.charAt(currChar)) {
                return false;
            }

        }

        return true;
    }

//    static int amountOfMatchesStar(String toFind, ArrayList<String> dictionary) {
//        int cnt = 0;
//        for (String candidateStr : dictionary) {
//            for (int currChar = 0; currChar < 9; currChar++) {
//                if (toFind.charAt(currChar) == '*') {
//                    if (sameFromBack(toFind, candidateStr)) {
//                        cnt++;
//                    }
//                    break;
//                }
//
//                if (candidateStr.charAt(currChar) != toFind.charAt(currChar)) {
//                    break;
//                }
//            }
//        }
//
//        return cnt;
//    }

//    static int amountOfMatches(String toFind, ArrayList<String> dictionary) {
//        int cnt = 0;
//
//        String correctRegex;
//
//        for (String candidateStr : dictionary) {
//            correctRegex = toFind.replaceAll("\\*", ".*");
//            correctRegex = correctRegex.replaceAll("\\?", ".");
//            if (candidateStr.matches(correctRegex)) {
//                cnt++;
//            }
////            for (int currChar = 0; currChar < 9; currChar++) {
////                if (candidateStr.matches(toFind)) {
////                    cnt++;
////                }
////            }
//        }
//
//        return cnt;
//    }

    static int amountOfMatchesOld(String toFind, ArrayList<String> dictionary) {
        int cnt = 0;
        for (String candidateStr : dictionary) {
            if (toFind.contains("?")) {
                String correctRegex = toFind.replaceAll("\\?", ".");
                if (candidateStr.matches(correctRegex)) {
                    cnt++;
                }
//                break;
            }
            for (int currChar = 0; currChar < 9; currChar++) {
                if (toFind.charAt(currChar) == '*') {
                    if (sameFromBack(toFind, candidateStr)) {
                        cnt++;
                    }
                    break;
                }

                if (candidateStr.charAt(currChar) != toFind.charAt(currChar)) {
                    break;
                }
            }
        }

        return cnt;
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ArrayList<String> undamagedArr = new ArrayList<>();
        List<String> damagedArr = new ArrayList<>();

        int unmgCnt = input.nextInt();
        for (int i = 0; i < unmgCnt; i++) {
            undamagedArr.add(input.next());
        }

        int dmgCnt = input.nextInt();
        for (int i = 0; i < dmgCnt; i++) {
            damagedArr.add(input.next());
        }


        for (String damaged : damagedArr) {
//            if (damaged.contains("*")) {
            System.out.println(amountOfMatchesOld(damaged, undamagedArr));
//            }
//            else if (damaged.contains("?")) {
//                System.out.println(amountOfMatchesQuestionMark(damaged, undamagedArr));
//
//            }
        }
    }
}