Array and Easy Queries

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

문제

원래 이 자리에는 킬러 문제가 들어갈 예정이었지만, 다른 문제의 난이도가 예상보다 높은 걸 보고 경악한 브루는 자신과 같은 낮은 실력의 참가자도 즐길 수 있는 쉬운 문제를 만들기로 결심했습니다.

길이 NN의 수열 AA가 주어집니다. 이 수열에 아래 네 가지 종류의 쿼리를 처리하는 프로그램을 만들어 봅시다.

  • 11  ll  rr  xx : lirl \le i \le r인 모든 A_iA\_iA_iA\_i  AND  xx로 바꿉니다.
  • 22  ll  rr  xx : lirl \le i \le r인 모든 A_iA\_iA_iA\_i  OR  xx로 바꿉니다.
  • 33  ll  rr  xx : lirl \le i \le r인 모든 A_iA\_iA_iA\_i  XOR  xx로 바꿉니다.
  • 44  ll  rr  xx : lirl \le i \le r이고 A_i=xA\_i = xii의 개수를 출력합니다.

이때, AND, OR, XOR은 비트 연산을 의미합니다.

입력

첫 줄에는 수열의 길이 NN과 쿼리의 수 QQ가 주어집니다.

둘째 줄에는 수열의 초기 상태 A_1,A_2,,A_NA\_1, A\_2, \cdots, A\_N이 주어집니다.

셋째 줄부터 QQ개의 줄에는 각 쿼리에 대한 정보 tt  ll  rr  xx가 순서대로 주어집니다.

출력

모든 4번 쿼리에 대해, 그 답을 한 줄에 하나씩 출력합니다.

제한

  • 1N1061 \le N \le 10^6
  • 1Q1051 \le Q \le 10^5
  • 0A_i< 2160 \le A\_i < 2^{16}
  • 모든 쿼리에 대해, 1t41 \le t \le 4, 1lrN1 \le l \le r \le N, 0x<2160 \le x < 2^{16}
  • 4번 쿼리가 적어도 하나 주어집니다.