#include <bits/stdc++.h>
using namespace std;
int n, m;
bool debug = false;
int k;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
char s[1000005];
int a[1000005][30], cur, cnt, id[1000005], f[1000005], x, from[1000005],
    to[1000005], tr[1000005 * 2];
vector<int> child[1000005];
bool ac[1000005];
void dfs(int x) {
  from[x] = ++cnt;
  for (int c : child[x]) dfs(c);
  to[x] = ++cnt;
}
int lb(int x) { return x & (-x); }
void add(int pos, int val) {
  for (int i = pos; i <= cnt; i += lb(i)) tr[i] += val;
}
void build() {
  queue<int> q;
  q.push(0);
  while (!q.empty()) {
    int i = q.front();
    q.pop();
    for (int j = 0; j < 26; j++)
      if (a[i][j] != 0) {
        cur = a[i][j];
        if (i > 0) {
          for (x = f[i]; x != 0 && a[x][j] == 0; x = f[x])
            ;
          if (a[x][j] != 0) x = a[x][j];
          f[cur] = x;
        } else {
          f[cur] = 0;
        }
        q.push(cur);
        child[f[cur]].push_back(cur);
      }
  }
}
int main() {
  scanf("%d%d", &n, &k);
  for (int(i) = 0; (i) < (int)(k); (i)++) {
    scanf("%s", s);
    cur = 0;
    for (int j = 0; s[j]; j++) {
      int num = s[j] - 'a';
      if (a[cur][num] != 0)
        cur = a[cur][num];
      else {
        a[cur][num] = ++cnt;
        cur = a[cur][num];
      }
    }
    id[i + 1] = cur;
  }
  build();
  cnt = 0;
  dfs(0);
  for (int i = 1; i <= k; i++) {
    ac[i] = 1;
    add(from[id[i]], 1);
    add(to[id[i]], -1);
  }
  while (n--) {
    scanf("%s", s);
    if (s[0] != '?') {
      int x = atoi(s);
      if (x < 0 && !ac[-x]) continue;
      if (x > 0 && ac[x]) continue;
      ac[abs(x)] = x > 0 ? 1 : 0;
      add(from[id[abs(x)]], x < 0 ? -1 : 1);
      add(to[id[abs(x)]], x < 0 ? 1 : -1);
    } else {
      int j = 0;
      long long ret = 0;
      for (int i = 1; s[i]; i++) {
        cur = s[i] - 'a';
        for (x = j; x > 0 && a[x][cur] == 0; x = f[x])
          ;
        j = a[x][cur];
        if (j > 0)
          for (x = from[j]; x > 0; ret += tr[x], x -= lb(x))
            ;
      }
      printf("%lld\n", ret);
    }
  }
  return 0;
}
