Пропал мусор

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

문제

Во дворе Евстиграфа совсем недавно была генеральная уборка --- все жильцы дома собирали листву, подметали дорожки, убирали мусор, который каким-то образом оказался в их чистом дворе. Всё собранное добро они разложили по мешкам и оставили на ночь. Но на следующие утро обнаружилось, что кто-то украл весь мусор (наверное, автор этой задачи).

Единственное, что осталось от всего былого богатства --- какой-то странный прибор, на котором написано <<УсТнЫй СчЁт 3000>>. Его явно оставил вор в качестве подсказки к тому, как его найти. Чтобы получить хоть какую-то информацию о личности вора, вам придется сначала разобраться с этим прибором.

Как следует из названия, испытание заключается в проверке ваших навыков устного счёта. Для этого вам сначала показывается массив \[a_1,,a_n]\[a\_1, \ldots, a\_n], после чего прибор требует проделать некоторые манипуляции над отрезками массива:

  1. Вычислить сумму _i=lra_ii\sum\limits\_{i = l}^{r} a\_i \oplus i, где xyx \oplus y --- XOR двух чисел.
  2. Присвоить всем элементам массива на отрезке \[l;r]\[l; r] значение xx.
  3. Применить ко всем числам на отрезке \[l;r]\[l; r] операцию побитового AND, OR или XOR с числом xx.

Вы --- единственный, кто может помочь Евстиграфу с этой задачей. Но будьте осторожны: от вора мусора можно ожидать неприятные задачи.

입력

В первой строке записаны два числа nn и mm --- количество элементов в массиве и количество запросов (1n,m1051 \leqslant n, m \leqslant 10^5).

В следующей строке записаны nn чисел a_1a\_1, \ldots, a_na\_n --- массив, который показывает прибор (0a_i<2150 \leqslant a\_i < 2^{15}).

Следующие mm строк содержат описания запросов:

  1. запрос первого типа имеет вид <<11 ll rr>>;
  2. запрос второго типа имеет вид <<22 ll rr xx>>;
  3. запрос третьего типа имеет вид <<33 ll rr xx cc>>, где символ cc обозначает, какая логическая операция будет применяться: AND(\\&), OR()(|) или XOR(\textasciicircum)(\textasciicircum).

В каждом запросе выполняется 1lrn1 \leqslant l \leqslant r \leqslant n и 0x<2150 \leqslant x < 2^{15}.

출력

Для каждого запроса первого типа выведите в новой строке требуемую сумму.