Problems
Динамический Лес
Динамический Лес
Вам нужно научиться обрабатывать \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}, если они лежат в разных компонентах связности.
Input example #1
3 7 get 1 2 link 1 2 get 1 2 cut 1 2 get 1 2 link 1 2 get 1 2
Output example #1
-1 1 -1 1