#abc308g. [abc308_g]Minimum Xor Pair Query

[abc308_g]Minimum Xor Pair Query

問題文

整数を書くことができる黒板があります。はじめ黒板には整数は何も書かれていません。クエリが QQ 個与えられるので順に処理してください。

クエリは以下の 33 種類です。

  • 1 x : 黒板に xx を一つ書き込む。

  • 2 x : 黒板に書かれた xx を一つ消去する。このクエリが与えられるとき、黒板に xx が一つ以上書かれていることが保証される。

  • 3 : 黒板に書かれた二つの整数のビット単位 XOR としてあり得る最小値を出力する。このクエリを処理する際、黒板に整数が二つ以上書かれていることが保証される。

ビット単位 XOR とは 非負整数 A,BA, B のビット単位 XOR 、AoplusBA \\oplus B は、以下のように定義されます。

  • AoplusBA \\oplus B を二進表記した際の 2k2^k (kgeq0k \\geq 0) の位の数は、A,BA, B を二進表記した際の 2k2^k の位の数のうち一方のみが 11 であれば 11、そうでなければ 00 である。

例えば、3oplus5=63 \\oplus 5 = 6 となります (二進表記すると: 011oplus101=110011 \\oplus 101 = 110)。

制約

  • 1leqQleq3times1051\\leq Q \\leq 3\\times 10^5
  • 0leqx<2300\\leq x < 2 ^{30}
  • クエリ 22 が与えられるとき、黒板に xx が一つ以上書かれている
  • クエリ 33 が与えられるとき、黒板に整数が二つ以上書かれている
  • 入力される数値は全て整数

入力

入力は以下の形式で標準入力から与えられる。

QQ mathrmquery1\\mathrm{query}_1 mathrmquery2\\mathrm{query}_2 vdots\\vdots mathrmqueryQ\\mathrm{query}_Q

ii 番目のクエリ mathrmqueryi\\mathrm{query}_i では、まずクエリの種類 cic_i1,2,31, 2, 3 のいずれか)が与えられる。 ci=1,ci=2c_i = 1, c_i = 2 の場合はさらに整数 xx が追加で与えられる。

すなわち、各クエリは以下に示す 33 つの形式のいずれかである。

11 xx 22 xx 33

出力

ci=3c_i=3 を満たすクエリの回数を qq として qq 行出力せよ。

j(1leqjleqq)j\\ (1\\leq j\\leq q) 行目では jj 番目のそのようなクエリに対する答えを出力せよ。


入力例 1

9
1 2
1 10
3
1 3
3
2 2
3
1 10
3

出力例 1

8
1
9
0

11 番目のクエリ処理後、黒板には 22 が一つ書かれています。

22 番目のクエリ処理後、黒板には 2,102,10 が一つずつ書かれています。

33 番目のクエリ処理時、黒板に書かれた二つの数のビット単位 XOR として考えられる最小値は 2oplus10=82\\oplus 10=8 です。

44 番目のクエリ処理後、黒板には 2,3,102,3,10 が一つずつ書かれています。

55 番目のクエリ処理時、黒板に書かれた二つの数のビット単位 XOR として考えられる最小値は 2oplus3=12\\oplus 3=1 です。

66 番目のクエリ処理後、黒板には 3,103,10 が一つずつ書かれています。

77 番目のクエリ処理時、黒板に書かれた二つの数のビット単位 XOR として考えられる最小値は 3oplus10=93\\oplus 10=9 です。

88 番目のクエリ処理後、黒板には 33 が一つ、 1010 が二つ書かれています。

99 番目のクエリ処理時、黒板に書かれた二つの数のビット単位 XOR として考えられる最小値は 10oplus10=010\\oplus 10=0 です。