#include <bits/stdc++.h>
using namespace std;
const long long maxn = 5e6 + 20;
long long l[maxn], r[maxn], lsum[maxn], rsum[maxn], tah = 1, ln, pnow, res;
void ar(int p, int x, int z, long long i = 31) {
  if (i < 0) return;
  if (!l[p]) {
    l[p] = tah++;
    r[p] = tah++;
  }
  if ((((x) >> i) & 1))
    rsum[p] += z, ar(r[p], x, z, i - 1);
  else
    lsum[p] += z, ar(l[p], x, z, i - 1);
}
void solve(int p, long long i = 31) {
  if (i < 0) return;
  if (!l[p]) return;
  if ((((ln) >> i) & 1)) {
    if ((((pnow) >> i) & 1)) {
      res += rsum[p];
      solve(l[p], i - 1);
    } else {
      res += lsum[p];
      solve(r[p], i - 1);
    }
  } else {
    if ((((pnow) >> i) & 1))
      solve(r[p], i - 1);
    else
      solve(l[p], i - 1);
  }
}
int main() {
  int q;
  cin >> q;
  while (q--) {
    int a;
    cin >> a;
    if (a == 1) {
      int x;
      cin >> x;
      ar(0, x, 1);
    }
    if (a == 2) {
      int x;
      cin >> x;
      ar(0, x, -1);
    }
    if (a == 3) {
      res = 0;
      cin >> pnow >> ln;
      solve(0);
      cout << res << endl;
    }
  }
}
