Module: 해싱


Problem

8 /8


벙커

Theory Click to read/hide

루트 트리를 효율적으로 해시하는 방법에는 여러 가지가 있습니다. 
이러한 방법 중 하나는 다음과 같이 구성됩니다.
깊이 순회 순서대로 정점을 재귀적으로 처리합니다. 단일 정점의 해시가 p와 같다고 가정합니다. 자식이 있는 정점의 경우 먼저 알고리즘을 실행한 다음 자식을 통해 현재 하위 트리의 해시를 계산합니다. 이렇게 하려면 자식 하위 트리의 해시를 숫자 시퀀스로 간주하고 이 시퀀스에서 해시를 계산합니다. 이것은 현재 하위 트리의 해시가 됩니다.
하위 항목의 순서가 중요하지 않은 경우 해시를 계산하기 전에 하위 하위 트리에서 해시 시퀀스를 정렬한 다음 정렬된 시퀀스에서 해시를 계산합니다.

이렇게 하면 트리의 동형을 확인할 수 있습니다. 자식에 대한 순서 없이 해시를 계산합니다(즉, 자식의 해시를 정렬할 때마다). 그리고 루트의 해시가 일치하면 트리는 동형이고 그렇지 않으면 그렇지 않습니다.

루트가 없는 트리의 경우 모든 것이 비슷한 방식으로 발생하지만 중심을 루트로 가져와야 합니다. 또는 두 개의 중심이 있는 경우 한 쌍의 해시를 고려하십시오.

Problem

Petya와 Vasya는 열정적으로 스파이 역할을합니다. 오늘 그들은 어디로 갈지 계획하고 있습니다. 
비밀 벙커와 본부를 찾았습니다. 

지금까지 Petya와 Vasya는 비밀 유지를 위해 정확히 n개의 벙커가 필요하다고 결정했습니다. 
그들 중 일부는 양방향 터널로 연결될 것이며 신뢰성과 비밀성을 위해 모든 벙커에서 어느 방향으로든 터널에 접근할 수 있습니다.
Petya와 Vasya는 어느 벙커를 터널로 연결할지 결정했지만 어느 벙커를 본부로 할지 선택할 수 없습니다. 
소년들은 그것을 선택하고 나머지 벙커를 그들끼리 나누어 동일한 수의 벙커를 얻길 원합니다. 정확히 두 개의 터널이 본부로 연결됩니다: 하나는 Vasya에 속한 벙커에서, 다른 하나는 Petya에 속한 벙커에서. 
                                                                                   
피곤한 Petya는 그의 집으로 갔고 아침에 Vasya는 벙커에 점을 표시하고 터널에 세그먼트를 표시한 계획을 그에게 보여주었습니다. 
또한 Vasya는 그가 그린 평면도가 본사에 해당하는 지점을 통과하는 직선에 대해 대칭이 되도록 본사를 선택했습니다.
 
Petya는 거의 즉시 Vasya에게 자신이 실수를 저질렀고 벙커의 절반을 그리지 않았다는 것을 보여 주었지만 그는 본부를 선택하고 그러한 대칭 계획을 그리는 것이 가능한지 궁금했습니다.

입력:
입력 파일의 첫 번째 줄에는 하나의 정수 n(1 <= n <= 105) - 빈 수를 포함합니다. 
다음 n - 1 행에는 두 개의 정수 ui 및 vi(1 <= ui, vi )가 포함됩니다. sub> <= n, ui ≠ vi) - i번째 터널로 연결된 벙커의 수. 
두 개의 벙커 사이에 경로가 하나만 있음을 보장합니다.

출력:
출력 파일에서 본사를 선택하고 그러한 계획을 그릴 수 있는 경우 "YES"를 인쇄하거나 "NO"를 인쇄하십시오. 그게 불가능하다면.

예:
  <몸>
입력 출력
2
1 2
아니오
3
1 2
2 3