LCA와 쿼리
Time Limit: 3 SecMemory Limit: 1024 MiB

문제

정점이 개인 트리가 주어진다. 각 정점은 부터 까지 번호가 붙어있고 항상 번이 루트다. 이때, 다음 두 쿼리를 수행하는 프로그램을 작성하시오.

  • 1 X: 리스트에 번 정점 추가 (이때, 리스트에 번 정점이 없음을 보장)
  • 2 X: 리스트에 번 정점 삭제 (이때, 리스트에 번 정점이 있음을 보장)

쿼리가 끝날 때마다 리스트에 속한 모든 정점의 LCA를 출력해야 한다.

입력

첫째 줄에 정점 개수를 뜻하는 정수 이 주어진다.

둘째 줄부터 개 줄에 간선이 연결하는 두 정점 번호를 뜻하는 정수 가 주어진다.
주어진 입력이 항상 모든 정점을 포함하는 트리 구조를 이룬다.

번째 줄에는 쿼리 개수를 뜻하는 정수 가 주어진다.

번째 줄부터 개 줄에 쿼리가 한 줄에 하나씩 주어진다.
주어진 쿼리를 처리한 이후 리스트에 원소가 하나도 없는 경우는 주어지지 않는다.
리스트에 없는 정점을 지우거나 리스트에 있는 정점을 추가하는 입력은 주어지지 않는다.

출력

각 쿼리 이후, 리스트에 속한 모든 정점의 LCA를 출력한다.

노트

리스트에 속한 모든 정점의 LCA란, 리스트에 속한 모든 정점을 자손으로 갖는 가장 깊은 (루트로부터 가장 먼) 정점을 뜻한다. 이때, 한 정점이 다른 모든 정점을 자손으로 갖는다면 해당 정점이 LCA가 될 수 있다.

리스트에 속한 정점 개수가 개라면, 해당 정점이 LCA가 된다.

Example Input 1
7
1 2
1 3
1 4
3 5
3 6
5 7
7
1 7
1 3
1 5
1 2
2 2
1 6
2 3
Example Output 1
7
3
3
1
3
3
3