개의 정점으로 이루어진 트리 가 주어진다. 정점은 번부터 번까지 번호가 매겨져 있으며, 각 정점은 검은색 또는 흰색이다.
는 이진 트리이다. 처음에 의 루트는 번 정점이다.
다음 쿼리를 처리하는 프로그램을 작성하라.
1: 의 루트를 번 정점으로 바꾼다. 어떤 정점을 루트로 정해도 가 이진 트리임이 보장된다.2: 번 정점의 색을 바꾼다. 흰색은 검은색으로, 검은색은 흰색으로 바뀐다.3: 현재 루트를 기준으로 번 정점을 루트로 하는 서브트리의 흰색 정점 수를 라 하자. 또한 번 정점부터 현재 루트까지의 경로에 속한 흰색 정점 수를 라 하자. 이때 를 출력한다. 경로에는 양 끝점이 모두 포함된다.
Input
입력은 다음과 같은 형식으로 주어진다.
case case case
각 케이스는 다음과 같은 형식으로 주어진다.
이면 번 정점은 검은색이고, 이면 번 정점은 흰색이다.
번째 간선은 번 정점과 번 정점을 연결한다.
각 는 1 , 2 , 3 중 하나의 형식이다.
Output
각 3번 쿼리에 대해, 쿼리의 답을 한 줄에 하나씩 출력한다.
Constraints
- .
- .
- .
- ().
- ().
- 주어진 간선은 트리를 이룬다.
- 어떤 정점을 루트로 정해도 주어진 트리는 이진 트리이다.
- 모든 쿼리에서 이다.
- 각 케이스에는
3번 쿼리가 한 번 이상 주어진다. - 모든 케이스에 대한 의 합은 이하이다.
- 모든 케이스에 대한 의 합은 이하이다.
Subtasks
Samples
입력
2
5 7
1 0 1 1 0
1 2
2 3
3 4
4 5
3 3
1 5
3 3
2 2
3 3
3 5
3 1
1 5
0
3 1
2 1
3 1
1 1
3 1
출력
0
0
1
4
3
0
0
0
첫 번째 케이스의 세 번째 3번 쿼리에서는 번 정점이 서브트리에 포함되고, 번 정점이 루트까지의 경로에 포함된다. 두 구간의 흰색 정점 수는 각각 과 이므로 답은 이다.
두 번째 케이스는 정점이 하나뿐이므로 모든 3번 쿼리의 답은 이다.