#include <bits/stdc++.h>
using namespace std;
int ar[3000050][2];
int cnt[3000050];
int cu = 0;
void add(int a) {
  int tem = 0;
  for (int i = 30; i >= 0; i--) {
    cnt[tem]++;
    int ne = 0;
    if (a & (1 << i)) ne = 1;
    if (!ar[tem][ne]) {
      ar[tem][ne] = ++cu;
    }
    tem = ar[tem][ne];
  }
  cnt[tem]++;
}
void del(int a) {
  int tem = 0;
  for (int i = 30; i >= 0; i--) {
    cnt[tem]--;
    int ne = 0;
    if (a & (1 << i)) ne = 1;
    int p = tem;
    tem = ar[tem][ne];
    if (cnt[tem] == 1) ar[p][ne] = 0;
  }
  cnt[tem]--;
}
int get(int a) {
  int tem = 0;
  int y = 0;
  for (int i = 30; i >= 0; i--) {
    int h = 0;
    if (a & (1 << i)) h = 1;
    if (!ar[tem][h]) {
      y = 1;
      break;
    }
    tem = ar[tem][h];
  }
  return y;
}
long long query(int p, int l) {
  int tem = 0;
  long long ans = 0;
  for (int i = 30; i >= 0; i--) {
    int fl = (1 << i) & l;
    if (fl) {
      int h = (1 << i) & p;
      if (h) h = 1;
      if (ar[tem][h]) ans += cnt[ar[tem][h]];
      tem = ar[tem][h ^ 1];
    } else {
      int h = (1 << i) & p;
      if (h) h = 1;
      tem = ar[tem][h];
    }
    if (tem == 0) {
      break;
    }
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int q;
  cin >> q;
  while (q--) {
    int t;
    cin >> t;
    if (t == 1) {
      int a;
      cin >> a;
      add(a);
    } else if (t == 2) {
      int a;
      cin >> a;
      del(a);
    } else {
      int p, l;
      cin >> p >> l;
      cout << query(p, l) << "\n";
    }
  }
  return 0;
}
