#include <bits/stdc++.h>
using namespace std;
const long long maxn = (long long)1e6 + 9;
const long long mod = (long long)1e9 + 7;
string s, num;
long long a[maxn];
void add();
void del();
long long calc();
int main() {
  std::ios::sync_with_stdio(0);
  long long i, j, k, t, q, m, l, r, n;
  cin >> t;
  while (t--) {
    cin >> s >> num;
    if (s[0] == '+') {
      add();
    } else if (s[0] == '-') {
      del();
    } else if (s[0] == '?') {
      cout << calc() << '\n';
    }
  }
}
void add() {
  int i, n = num.size();
  long long pos = 0;
  for (i = 0; i < n; i++) {
    pos = 2 * pos + (((num[i] - '0') & 1) + 1);
  }
  a[pos]++;
}
void del() {
  int i, n = num.size();
  long long pos = 0;
  for (i = 0; i < n; i++) {
    pos = 2 * pos + (((num[i] - '0') & 1) + 1);
  }
  a[pos]--;
}
long long calc() {
  int i, n = num.size(), p;
  long long cnt = 0;
  for (i = 0; i <= 18 - n; i++) {
    int pos = 0;
    for (int j = 0; j < i; j++) {
      pos = 2 * pos + 1;
    }
    for (int j = 0; j < n; j++) {
      pos = 2 * pos + (((num[j] - '0') & 1) + 1);
    }
    cnt += a[pos];
  }
  for (p = 0; p < n; p++)
    if (num[p] == '1') break;
  for (i = 0; i < p; i++) {
    int pos = 0;
    for (int j = i + 1; j < n; j++) {
      pos = 2 * pos + (((num[j] - '0') & 1) + 1);
    }
    cnt += a[pos];
  }
  return cnt;
}
