아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

지렁이

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

요약
나무에서 지렁이들이 매시간 인접한 집으로 이동할 때, 모두 한 집에 모일 수 있는지 판정하고 최소 시간을 구한다.
난이도

어려움10점 중 8점

유형
트리, 그래프, 수학, 이분 탐색
정답자
아직 제출이 없습니다

문제

신비한 지렁이 나라에는 지렁이 집이 많이 있다. 모든 집에 지렁이가 사는 것은 아니며, 한 집에는 많아야 한 마리의 지렁이가 산다. 일부 집 쌍은 길로 연결되어 있다. 서로 다른 두 집을 고르면 같은 길을 두 번 지나지 않는 경로가 정확히 하나 존재한다. 즉, 집과 길은 전체적으로 하나의 트리를 이룬다.

어느 날 모든 지렁이가 한 집에 모이기로 했다. 매 시간마다 각 지렁이는 지금 있는 집에서 길 하나를 따라 이동하여 그 길의 반대쪽 끝에 있는 집으로 간다(어떤 길이든 지나가는 데 정확히 한 시간이 걸린다). 지렁이는 매 시간마다 반드시 이동해야 하며 제자리에 머무를 수 없다. 지렁이들은 모두가 같은 시각에 같은 집에 있게 되는 순간까지 계속 이동한다.

이 방법으로 모이는 데는 아주 오랜 시간이 걸릴 수 있고, 때로는 모이는 것이 불가능하기도 하다. 지렁이들이 모일 수 있는지, 모일 수 있다면 최선의 경우 몇 시간이 걸리는지 알아내는 것을 도와주자.

다음을 수행하는 프로그램을 작성하시오.

  • 표준 입력에서 지렁이 나라의 정보를 읽는다.
  • 지렁이들이 모일 수 있는지, 모일 수 있다면 최소 몇 시간이 걸리는지 판단한다.
  • 답을 표준 출력에 쓴다.

입력

첫째 줄에 두 정수 nn과 mm이 공백 하나로 구분되어 주어진다(2≤n≤500002 \le n \le 50000, 1≤m≤500001 \le m \le 50000). 각각 집의 수와 길의 수를 나타낸다. 집은 11번부터 nn번까지 번호가 매겨져 있다.

이어지는 mm개의 줄에는 각각 두 정수 aa와 bb가 공백 하나로 구분되어 주어진다(1≤a,b≤n1 \le a, b \le n). 이는 집 aa와 집 bb를 잇는 길을 나타낸다.

그다음 줄에는 지렁이의 수를 나타내는 정수 kk가 주어진다(2≤k≤n2 \le k \le n). 이어지는 kk개의 줄에는 각각 한 정수 dd가 주어지며(1≤d≤n1 \le d \le n), 한 지렁이가 사는 집을 나타낸다. 어떤 두 지렁이도 같은 집에 살지 않는다.

출력

한 줄을 출력한다. 규칙에 따라 지렁이들이 결코 모두 모일 수 없다면 NIE(폴란드어로 아니오)를 출력한다. 그렇지 않으면 모든 지렁이가 한 집에 모이는 데 필요한 최소 시간을 정수 하나로 출력한다.

힌트

예제1

  1. 예제 1

    입력
    6 5
    1 2
    2 3
    2 4
    4 5
    4 6
    3
    2
    5
    6
    
    예상 출력
    1