Урок арифметики

아직 제출이 없습니다시간 제한2초메모리 제한1024 MB

문제

В самой обычной школе в Ваканде на уроке арифметики сегодня проходят битовые операции с числами.

А именно, операции and и xor. Напомним, что битовая операция над двумя числами выполняется независимо по каждому биту. Таблицы истинности для операций and и xor выглядят следующим образом:

xxyyxx and yyxx xor yy
00000000
00110011
11000011
11111100

В начале урока учитель написал на доске последовательность длины nn из чисел. Затем он просит учеников последовательно выполнять следующие операции:

  • Учитель сообщает число xx. Ученики должны получить новую последовательность, применив операцию xor с числом xx ко всем элементам текущей последовательности.
  • Учитель сообщает число xx. Ученики должны получить новую последовательность, применив операцию and с числом xx ко всем элементам текущей последовательности.
  • Учитель сообщает числа ll и rr, и просит сообщить ему количество чисел в текущей последовательности, которые больше либо равны ll и меньше либо равны rr.

Помогите ученикам ответить на все вопросы учителя правильно.

입력

В первой строке содержится два целых числа nn и qq --- количество чисел в последовательности, и количество операций, которое нужно выполнить (1n100,0001 \le n \le 100\\,000, 0q100,0000 \le q \le 100\\,000). В следующей строке дано nn целых чисел a_ia\_i --- элементы исходной последовательности (0a_i<2200 \le a\_i < 2^{20}). В следующих qq строках дано описание операций. Если строка начинается со слова <<xor>>, то это операция первого типа, дальше в той же строке дано число xx, и ученикам нужно заменить все элементы cur_icur\_i текущей последовательности на (cur_i(cur\_i xor x)x) (0x<2200 \le x < 2^{20}). Если строка начинается со слова <<and>>, то это операция второго типа, дальше в той же строке дано число xx, и ученикам нужно заменить все элементы cur_icur\_i текущей последовательности на (cur_i(cur\_i and x)x) (0x<2200 \le x < 2^{20}). Если строка начинается с символа '?', то дальше даны два целых числа ll и rr, ученикам нужно посчитать количество элементов текущей последовательности cur_icur\_i, таких что lcur_irl \le cur\_i \le r (0lr<2200 \le l \le r < 2^{20}).

출력

Для каждой операции третьего типа на новой строке выведите искомое количество чисел.

힌트

Пояснение к первому тесту.

После операции xor 11, последовательность будет выглядеть следующим образом:

00, 33, 22, 55, 44

После операции and 22, последовательность будет выглядеть следующим образом:

00, 22, 22, 00, 00