#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int infi = 1147483600;
const long long infl = 4e18 + 5;
const char ENDL = '\n';
const long long MOD = 998244353;
int n, q;
vector<vector<int>> t(3);
int dp[255][255][255];
int nex[26][100005];
vector<multiset<int>> idx(26);
void update(int i, int j, int k) {
  dp[i][j][k] = n;
  if (i > 0) {
    int c = t[0][i];
    dp[i][j][k] = min(dp[i][j][k], nex[c][dp[i - 1][j][k] + 1]);
  }
  if (j > 0) {
    int c = t[1][j];
    dp[i][j][k] = min(dp[i][j][k], nex[c][dp[i][j - 1][k] + 1]);
  }
  if (k > 0) {
    int c = t[2][k];
    dp[i][j][k] = min(dp[i][j][k], nex[c][dp[i][j][k - 1] + 1]);
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> n >> q;
  string s;
  cin >> s;
  for (int i = 0; i < (int)n; i++) idx[s[i] - 'a'].insert(i);
  for (int i = 0; i < (int)26; i++) idx[i].insert(n);
  for (int i = 0; i < (int)26; i++) {
    auto itr = idx[i].begin();
    for (int j = 0; j < (int)n; j++) {
      if (*itr < j) itr++;
      nex[i][j] = *itr;
    }
    for (int j = (int)n; j < (int)n + 4; j++) nex[i][j] = n;
  }
  dp[0][0][0] = -1;
  for (int i = 0; i < (int)3; i++) t[i].emplace_back(-1);
  for (int xx = 0; xx < (int)q; xx++) {
    char x;
    cin >> x;
    if (x == '+') {
      int d;
      cin >> d;
      d--;
      char c;
      cin >> c;
      t[d].emplace_back(c - 'a');
      if (d == 0) {
        int i = t[0].size() - 1;
        for (int j = 0; j < (int)t[1].size(); j++)
          for (int k = 0; k < (int)t[2].size(); k++) update(i, j, k);
      } else if (d == 1) {
        int j = t[1].size() - 1;
        for (int i = 0; i < (int)t[0].size(); i++)
          for (int k = 0; k < (int)t[2].size(); k++) update(i, j, k);
      } else {
        int k = t[2].size() - 1;
        for (int i = 0; i < (int)t[0].size(); i++)
          for (int j = 0; j < (int)t[1].size(); j++) update(i, j, k);
      }
      if (dp[t[0].size() - 1][t[1].size() - 1][t[2].size() - 1] < n) {
        cout << "YES" << ENDL;
      } else {
        cout << "NO" << ENDL;
      }
    } else {
      int d;
      cin >> d;
      d--;
      t[d].pop_back();
      if (dp[t[0].size() - 1][t[1].size() - 1][t[2].size() - 1] < n) {
        cout << "YES" << ENDL;
      } else {
        cout << "NO" << ENDL;
      }
    }
  }
}
