Когда-то давно Вадим придумал задачу, но не смог решить у неё одну деталь. Он подошёл к одному опытному спортивному программисту и узнал, что эта задача уже существует. На этом Вадим забросил свою идею и забыл про неё... Прошло несколько лет. Вадим сдал решение этой задачи... А через несколько дней он придумал более сложную версию... Так, о чём я тут?..
ООО «Логистика и маршруты» и ООО «Маршруты и логистика» — две конкурирующие компании. Они работают по стране, в которой N городов (все города пронумерованы от 1 до N), между какими-то парами городов проложены железнодорожные пути, при этом от любого города до любого можно добраться по последовательности этих путей единственным способом.
Каждый город может заключать и расторгать контракты с компаниями. Если одна из компаний обслуживает некоторый набор городов, то их поезда ездят только между этими городами и никуда больше. Назовём все города, через которые проезжают поезда компании логистической сетью этой компании. Например, если компания обслуживает два города, то в логистической сети содержатся все города между ними. Довольно очевидно, что если какой-то из городов заключает или расторгает контракт, то логистическая сеть сразу же меняется.
На протяжении Q лет произошло много изменений, ведь ровно тогда были основаны ООО «Логистика и маршруты» и ООО «Маршруты и логистика», и ровно тогда они начали привлекать клиентов. В один год могло произойти одно из пяти важных событий для этих компаний:
-
Город заключает контракт с ООО «Логистика и маршруты». Это могло произойти только если контракта между ними не было.
-
Город расторгает контракт с ООО «Логистика и маршруты». Это могло произойти только если контракт между ними был.
-
Город заключает контракт с ООО «Маршруты и логистика». Это могло произойти только если контракта между ними не было.
-
Город расторгает контракт с ООО «Маршруты и логистика». Это могло произойти только если контракт между ними был.
-
Контракты остались такими же. Такое могло произойти только если у обеих компаний подписан контракт хотя бы с одним городом. В этот год компании оценивают свою конкурентоспособность и рассчитывают расстояние между своей логистической сетью и логистической сетью конкурента. Это расстояние считается так: рассмотрим все пары, где первый город находится в логистической сети ООО «Логистика и маршруты» и второй город находится в логистической сети ООО «Маршруты и логистика»; найдём количество железнодорожных путей, по которым надо проехать, чтобы добраться от первого до второго города (это количество может быть нулевым); выберем наименьшее из этих количеств.
В следующем году на рынок хочет выйти новая компания ООО «Логистические маршруты и маршрутная логистика». Они наняли вас в роли аналитика и хотят восстановить историю двух конкурентов. Вы легко нашли всю информацию о контрактах, а вот расстояния вам придётся рассчитать самим.
Исходные данные
В первой строке даётся целое число N — количество городов в стране (2 ≤ N ≤ 105).
В следующих N−1 строках даются два целых числа ui и vi — номера городов, соединённые i-ми железнодорожными путями (1 ≤ ui, vi ≤ N, ui ≠ vi). Гарантируется, что любую пару городов соединяет не более чем один железнодорожный путь.
В следующей строке даётся целое число Q — количество лет (3 ≤ Q ≤ 105). В нулевой год у компаний не было заключено ни одного контракта.
В следующих Q строках описаны события в одном из 5 форматов:
-
+1 v — город под номером v заключил контракт с ООО «Логистика и маршруты». Гарантируется, что между ними контракта ещё не было.
-
-1 v — город под номером v расторг контракт с ООО «Логистика и маршруты». Гарантируется, что между ними контракт был.
-
+2 v — город под номером v заключил контракт с ООО «Маршруты и логистика». Гарантируется, что между ними контракта ещё не было.
-
-2 v — город под номером v расторг контракт с ООО «Маршруты и логистика». Гарантируется, что между ними контракт был.
-
? — контракты не менялись и рассчитывалось расстояние между логистическими сетями. Гарантируется, что у каждой компании есть хотя бы один контракт.
Для каждого события выполняется неравенство 1 ≤ v ≤ N.
Результат
Для каждого года, когда контракты не менялись, выведите расстояние между логистическими сетями ООО «Логистика и маршруты» и ООО «Маршруты и логистика».
Пример
| исходные данные | результат |
|---|
7
1 2
1 3
2 4
2 5
3 6
3 7
11
+1 4
+2 7
?
+1 5
?
+2 1
?
-1 4
?
-2 1
?
| 4
3
1
2
4
|
Автор задачи: Вадим Баринов
Источник задачи: Квалификационный тур Уральского регионального чемпионата ICPC 2026