#include <bits/stdc++.h>
using namespace std;
vector<string> tud;
map<char, bool> kitu;
bool vitri[2000];
char mainn[2000];
int n, m;
char a;
int main() {
  scanf("%d", &n);
  scanf("%c", &a);
  for (int i = 0; i < n; i++) {
    scanf("%c", &a);
    mainn[i] = a;
    if (a == '*')
      vitri[i] = true;
    else
      kitu[a] = true;
  };
  scanf("%d", &m);
  scanf("%c", &a);
  string h = "";
  for (int i = 0; i < m; i++)
    if (h.empty()) {
      bool kt = true;
      for (int j = 0; j < n; j++) {
        scanf("%c", &a);
        if ((vitri[j] && kitu[a]) || (!vitri[j] && a != mainn[j])) kt = false;
        if (vitri[j]) h += a;
      };
      if (kt == false) h = "";
      scanf("%c", &a);
    } else {
      bool kt = true;
      string ht;
      for (int j = 0; j < n; j++) {
        scanf("%c", &a);
        if ((vitri[j] && kitu[a]) || (!vitri[j] && a != mainn[j])) kt = false;
        if (vitri[j]) ht += a;
      };
      if (kt) tud.push_back(ht);
      scanf("%c", &a);
    };
  map<char, bool> ht;
  for (int i = h.size() - 1; i >= 0; i--)
    if (!ht[h[i]])
      ht[h[i]] = true;
    else
      h.erase(h.begin() + i, h.begin() + i + 1);
  if (!tud.empty())
    for (int i = 0; i < tud.size(); i++) {
      map<char, bool> ht;
      for (int j = tud[i].size() - 1; j >= 0; j--)
        if (!ht[tud[i][j]])
          ht[tud[i][j]] = true;
        else
          tud[i].erase(tud[i].begin() + j, tud[i].begin() + j + 1);
    };
  map<char, int> f;
  int kq = 0;
  if (!tud.empty()) {
    for (long long i = 0; i < tud.size(); i++)
      for (long long j = 0; j < tud[i].size(); j++) f[tud[i][j]]++;
    for (long long i = 0; i < h.size(); i++)
      if (f[h[i]] == tud.size()) kq++;
  };
  if (tud.empty())
    printf("%d", h.size());
  else
    printf("%d", kq);
  return 0;
}
