Mexor tree

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

문제

NN개의 정점을 가진 트리가 주어진다. 정점 ii는 정점값 a_ia\_i를 가진다.

다음과 같은 쿼리가 총 MM개 주어진다.

  • x,y,z,:x\\,y\\,z\\,: 정점 xxyy를 잇는 단순 경로 상의 정점들의 값들을 각각 zzXOR 연산을 시행한 값으로 바꾼다.

MM개의 쿼리를 시행하고 난 후 새로운 수열 b_ib\_i를 다음과 같이 정의하자.

  • b_i=b\_i = 정점 SS와 정점 ii를 잇는 단순 경로 상의 정점들의 값들 중에 존재하지 않는 음이 아닌 정수 중 최솟값. (1iN)(1 \leq i \leq N)

모든 b_ib\_i들을 구해보자.

입력

첫째 줄에 정수 NNSS가 공백으로 구분되어 주어진다. (1N300,000,1SN)(1 \leq N \leq 300\\,000,1\leq S \leq N)

둘째 줄에 정점들의 값인 정수로 이루어진 수열 a_1,a_2,,a_Na\_1, a\_2, \cdots, a\_N이 공백으로 구분되어 주어진다. (0a_iN)(0\leq a\_i \leq N)

셋째 줄부터 N1N-1개의 줄에 걸쳐 트리의 간선을 나타내는 두 정수 u,vu,v가 공백으로 구분되어 주어진다. 이는 정점 uu와 정점 vv를 잇는 간선을 의미한다. (1u,vN)(1\leq u,v\leq N)

N+2N+2번째 줄에 쿼리의 개수를 나타내는 정수 MM이 주어진다. (1M300,000)(1\leq M \leq 300\\,000)

N+3N+3번째 줄부터 MM개의 줄에 걸쳐 쿼리를 나타내는 세 정수 x,y,zx,y,z가 공백으로 구분되어 주어진다. (1x,y,zN)(1\leq x,y,z\leq N)

출력

첫째 줄에 수열 b_1,b_2,,b_Nb\_1,b\_2,\cdots,b\_N을 공백으로 구분하여 출력한다.