eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

Динамічний Ліс

Динамічний Ліс

Вам потрібно навчитись опрацьовувати \textbf{3} типи запитів: \begin{enumerate} \item Додати ребро в граф (\textbf{link}). \item Видалити ребро з графа (\textbf{cut}). \item Для двох вершинам \textbf{a} та \textbf{b} повернути довжину шляху між ними (або \textbf{-1}, якщо вони лежать у різних компонентах зв'язності) (\textbf{get}). \end{enumerate} Спочатку граф порожній (містить \textbf{N} вершин, не містить ребер). Гарантується, що у довільний момент часу граф є лісом. При додаванні ребра гарантується, що його зараз у графі немає. При видаленні ребра гарантується, що воно вже додано. \InputFile Числа \textbf{N} та \textbf{M} (\textbf{1} ≤ \textbf{N} ≤ \textbf{10^5+1}, \textbf{1} ≤ \textbf{M} ≤ \textbf{10^5}) --- кількість вершин у дереві і, відповідно, запитів. Далі \textbf{M} рядків, у кожному рядку команда (\textbf{link} або \textbf{cut}, або \textbf{get}) та \textbf{2} числа від \textbf{1} до \textbf{N} --- номери вершин у запиті. \OutputFile У вихідний файл для кожного запиту \textbf{get} виведіть одне число --- відстань між вершинами, або \textbf{-1}, якщо вони лежать у різних компонентах зв'язності.
Ліміт часу 1 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
3 7
get 1 2
link 1 2
get 1 2
cut 1 2
get 1 2
link 1 2
get 1 2
Вихідні дані #1
-1
1
-1
1