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 amountOfMatches(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));
        }
    }
}