// Acest cod este facut sa fie cat mai scurt, in limita restrictiilor de coding-style. De aceeea el foloseste vector<> si break
#include <stdio.h>
#include <vector>
using namespace std;
vector<int> tab[666013];
inline int H(int k)
{
return ((long long)(k) * 641 * 641) % 666013;
}
void push(int val)
{
int h = H(val);
int flag = 1;
for (int i = 0; i < tab[h].size(); ++i) {
if (tab[h][i] == val) {
flag = 0;
}
}
if (flag) {
tab[h].push_back(val);
}
}
void pop(int val)
{
int h = H(val);
for (int i = 0; i < tab[h].size(); ++i) {
if (tab[h][i] == val) {
tab[h].erase(tab[h].begin() + i);
break;
}
}
}
bool check(int val)
{
int h = H(val);
for (int i = 0; i < tab[h].size(); ++i) {
if (tab[h][i] == val) {
return 1;
}
}
return 0;
}
int main()
{
FILE *fin, *fout;
fin = fopen("hashuri.in", "r");
fout = fopen("hashuri.out", "w");
int N;
fscanf(fin, "%d", &N);
for (int i = 0; i < N; ++i) {
int op, num;
fscanf(fin, "%d%d", &op, &num);
if (op == 1) {
push(num);
} else if (op == 2) {
pop(num);
} else if (op == 3) {
fprintf(fout, check(num) ? "1\n" : "0\n");
}
}
fclose(fin);
fclose(fout);
return 0;
}