Вам нужно научиться обрабатывать 3 типа запросов:
Добавить ребро в граф (link).
Удалить ребро из графа (cut).
По двум вершинам a и b вернуть длину пути между ними (или -1, если они лежат в разных компонентах связности) (get).
Изначально граф пустой (содержит N вершин, не содержит ребер). Гарантируется, что в любой момент времени граф является лесом. При добавлении ребра гарантируется, что его сейчас в графе нет. При удалении ребра гарантируется, что оно уже добавлено.
Числа N и M (1 ≤ N ≤ 10^5+1, 1 ≤ M ≤ 10^5) — количество вершин в дереве и, соответственно, запросов. Далее Mстрок, в каждой строке команда (link или cut, или get) и 2 числа от 1 до N — номера вершин в запросе.
В выходной файл для каждого запроса get выведите одно число — расстояние между вершинами, или -1, если они лежат в разных компонентах связности.