10847. Роботи


Відправити розв'язок

Бали: 100
Time limit: 1.0s
Memory limit: 500M

Authors:
Problem type
Allowed languages
C++, Java, Pascal, Python

У підземеллі є \(N\) залів, з'єднаних тунелями. У деяких залах знаходяться роботи, які одночасно здобули команду зібратися в одному місці.

Роботи влаштовані так, що, отримавши команду, вони почали рухатися з такою швидкістю, що тунель між двома будь-якими залами долають за 1 хвилину. Роботи не можуть зупинятися (у тому числі і в залах), а також змінювати напрямок руху, перебуваючи в тунелях (проте потрапивши до зали, робот може з нього піти тим же тунелем, яким він прийшов у цей зал).

Напишіть програму, яка обчислює, через який мінімальний час усі роботи зможуть зібратися разом (у залі або в тунелі).

Формат вхідних даних

Перший рядок містить число \(N\) – кількість залів (\(1≤N≤400\)) та \(K\) – кількість тунелів (\(1≤K≤20000\)).

Далі вводиться \(K\) пар чисел, кожна пара описує номери залів, що з'єднуються тунелем (тунелем можна переміщатися в обидві сторони). Між двома залами може бути кілька тунелів. Тунель може поєднувати зал із самим собою.

Далі слідує число \(M\) (\(1≤M≤400\)) — кількість роботів.

Потім вводяться \(M\) чисел, що задають номери залів, де спочатку розташовані роботи. В одному залі може бути кілька роботів.

Формат вихідних даних

Виведіть мінімальний час у хвилинах, через який роботи можуть зібратися разом. Якщо роботи ніколи не зможуть зібратися разом, виведіть –1 (мінус один).

Приклад вхідних даних

4 5
1 2
2 3
3 4
1 4
1 3
3
1 2 4

Приклад вихідних даних

1

Приклад вхідних даних

3 2
1 2
2 3
2
1 3

Приклад вихідних даних

1

Коментарі

Ще немає коментарів.