만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

까다로운 연산

시간 제한1초메모리 제한2048 MB

요약
배열에 접두사 XOR, 접미사 XOR, 그리고 각각의 역연산을 순서대로 적용한 뒤 최종 배열을 출력합니다.
난이도

보통10점 중 7점

유형
조합론, 비트 연산, 누적 합
정답자
아직 제출이 없습니다

문제

Svetozar에게 정수 nn개로 이루어진 배열 aa가 있다. 그는 이 배열에 다음 연산들을 생각해 냈다.

  • 1: 배열 aa를 aa의 접두사 XOR 배열로 바꾼다. 즉, 연산 후 ii번째 원소는 a1⊕a2⊕…⊕aia_1 \oplus a_2 \oplus \ldots \oplus a_i가 된다.
  • 2: 배열 aa를 접미사 XOR 배열로 바꾼다. 즉, 연산 후 ii번째 원소는 ai⊕ai+1⊕…⊕ana_i \oplus a_{i+1} \oplus \ldots \oplus a_n이 된다.
  • -1: 연산 1의 역연산이다. 연산 -1을 수행한 뒤 연산 1을 적용하면, 그 결과는 -1을 적용하기 전의 배열과 같아진다.
  • -2: 연산 2의 역연산이다. 연산 -2를 수행한 뒤 연산 2를 적용하면, 그 결과는 -2를 적용하기 전의 배열과 같아진다.

Svetozar는 여러 연산을 차례로 수행했고, 이 계산이 맞는지 확인하려고 한다. 첫 번째 연산은 항상 양수로 표시되며, 연속된 두 연산의 부호는 서로 다르다.

입력

첫 줄에 테스트 케이스의 수 TT (1≤T≤1051 \leq T \leq 10^5)가 주어진다. 각 테스트 케이스는 세 줄로 이루어진다.

첫 줄에는 배열의 크기 nn과 연산의 수 qq (1≤n,q≤1051 \leq n, q \leq 10^5)가 주어진다.

둘째 줄에는 배열의 원소 a1,a2,…,ana_1, a_2, \ldots, a_n (0≤ai≤1090 \leq a_i \leq 10^9)이 주어진다.

셋째 줄에는 실행 순서대로 연산 op1,op2,…,opqop_1, op_2, \ldots, op_q (−2≤opi≤2-2 \leq op_i \leq 2, opi≠0op_i \neq 0, op1>0op_1 > 0, opi⋅opi+1<0op_i \cdot op_{i+1} < 0)가 주어진다.

모든 테스트 케이스에서 nn의 합은 10510^5를 넘지 않고, qq의 합도 10510^5를 넘지 않는다.

출력

각 테스트 케이스마다 모든 연산을 적용한 뒤의 배열을 한 줄에 nn개의 정수로 출력한다.

예제1

  1. 예제 1

    입력
    3
    5 1
    0 1 2 4 8
    1
    7 2
    25 2 20 23 998 244 353
    2 -2
    9 9
    9 9 8 2 4 4 3 5 3
    2 -1 2 -1 2 -1 2 -1 2
    
    예상 출력
    0 1 3 7 15
    25 2 20 23 998 244 353
    4 7 2 1 14 7 14 6 4