eolymp
bolt
Try our new interface for solving problems
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}, если они лежат в разных компонентах связности.
Time limit 1 second
Memory limit 256 MiB
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