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++;
            }
        }

        return cnt;
    }
//
////    static int amountOfMatchesQuestionMark(String toFind, ArrayList<String> dictionary) {
////        int cnt = 0;
////        for (String candidateStr : dictionary) {
////            for (int currChar = 0; currChar < 9; currChar++) {
////                if (toFind.charAt(currChar) == '?') {
////                    if (currChar == 8) {
////                        cnt++;
////                    }
////                    continue;
////                } else if (toFind.charAt(currChar) == '*') {
////                    if (sameFromBack(toFind, candidateStr)) {
////                        cnt++;
////                    }
////                    break;
////                }
////
////                if (candidateStr.charAt(currChar) != toFind.charAt(currChar)) {
////                    break;
////                }
////
////                if (currChar == 8) {
////                    cnt++;
////                }
////            }
////        }
////
////        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) {
                System.out.println(amountOfMatches(damaged, undamagedArr));
        }
    }
}