Задачі
Динамічний Ліс
Динамічний Ліс
Вам потрібно навчитись опрацьовувати \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
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