В жизни даже самой успешной компании может наступить кризисный период, когда приходится принимать тяжёлое решение о реструктуризации, распускать и объединять отделы, увольнять работников и заниматься прочими неприятными делами. Рассмотрим следующую модель компании.
В Большой Софтверной Компании работают n человек. Каждый человек принадлежит какому-то отделу. Исходно каждый человек работает над своим проектом в своём собственном отделе (таким образом, в начале компания состоит из n отделов по одному человеку).
Однако, в жизни компании наступили тяжёлые времена, и руководство было вынуждено нанять кризисного менеджера, который начал переустраивать рабочий процесс для повышения эффективности производства. Обозначим за team(person) команду, в которой работает человек person. Кризисный менеджер может принимать решения двух типов:
При этом кризисный менеджер иногда может интересоваться, работают ли в одном отделе сотрудники x и y (1 ≤ x, y ≤ n).
Помогите кризисному менеджеру, ответив на все его запросы.
Первая строка входных данных содержит два целых числа n и q (1 ≤ n ≤ 200 000, 1 ≤ q ≤ 500 000) — количество сотрудников компании и количество запросов кризисного менеджера.
В последующих q строках находятся запросы кризисного менеджера. Каждый запрос имеет вид type x y, где . Если type = 1 или type = 2, то запрос представляет собой решение кризисного менеджера об объединении отделов соответственно первого или второго вида. Если type = 3, то требуется определить, работают ли в одном отделе сотрудники x и y. Обратите внимаие, что x может равняться y в запросе любого типа.
На каждый запрос типа 3 выведите «YES» или «NO» (без кавычек), в зависимости от того, работают ли в одном отделе соответствующие люди.
8 6
3 2 5
1 2 5
3 2 5
2 4 7
2 1 2
3 1 7
NO
YES
YES
Название |
---|