#include <bits/stdc++.h>
using namespace std;

#define mt make_tuple
#define mkp make_pair
#define pb push_back
#define pii pair<ll,ll>
#define pss pair<int,int>
#define pdd pair<double,double>
#define pldd pair<ld,ld>
#define pff pair<float,float>
#define piii pair<ll, pair<ll,ll> >
#define pddd pair<ld, pair<ld,ld> >
#define ff first
#define ss second
typedef long long int ll;
typedef unsigned long long int ull;
typedef long double ld;





const int N = (1 << 18);

int smbit[N];
int smbig[N];
int osobist[N];
int cur = 0;

int getBits(int s) {
    int ans = 0;
    for(int i = 0; i < 16; i++) {
        if((s & (1 << i)) != 0)
            ans++;
    }
    return ans;
}

void addSm(int kz, int s, int bit, int add) {
    smbit[s] += add;
}

int getSm(int kz, int s, int bit) {
    if(bit == 16) {
        return smbit[kz];
    }
    int ans = 0;
    if((s & (1 << bit)) != 0)
        ans += getSm(kz | (1 << bit), s, bit + 1);
    ans += getSm(kz, s, bit + 1);
    return ans;
}

void addBg(int kz, int s, int bit, int add) {
    if(bit == 16) {
        smbig[kz] += add;
        return;
    }
    addBg(kz | (1 << bit), s, bit + 1, add);
    if((s & (1 << bit)) == 0)
        addBg(kz, s, bit + 1, add);
}

int getBg(int kz, int s, int bit) {
    return smbig[s];
}


int main() {
    int q;
    cin >> q;

    fill(smbit, smbit + N, 0);
    fill(smbig, smbig + N, 0);
    fill(osobist, osobist + N, 0);

    int cnt = 0;

    while(q--) {
        string com;
        int s;
        cin >> com >> s;

        int bits = getBits(s);

        if(bits <= 8) {
            int add = 0;
            if(com == "add") {
                cur++;
                addSm(0, s, 0, 1);
                add = 1;
            } else if(com == "del") {
                cur--;
                addSm(0, s, 0, -1);
                add = -1;
            } else {
                printf("%d\n", getSm(0, s, 0));
            }

            if(add != 0) {
                int gig = (1 << 16) - 1;
                osobist[gig] += add;
                for(int i = 0; i < 16; i++) {
                    if((s & (1 << i)) == 0)
                        osobist[gig - (1 << i)] += add;
                }

                //for(int i = 0; i < 16; i++) {
                //    for(int z = i + 1; z < 16; z++) {
                //        osobist[(gig - (1 << i)) - (1 << z)] += add;
                //    }
                //}
            }
        } else {
            if(com == "add") {
                cur++;
                addBg(0, s, 0, 1);
            } else if(com == "del") {
                cur--;
                addBg(0, s, 0, -1);
            } else {
                int ans = getBg(0, s, 0);

                if(bits >= 15)
                    ans += osobist[s];
                else {
                    for(int ss = s; ; ss = (ss - 1) & s) {
                        ans += smbit[ss];
                        if(ss == 0)  break;
                    }
                }

                printf("%d\n", ans);
            }
        }
    }
}


