Задачи
Рисуем и вытираем
Рисуем и вытираем
\includegraphics{https://static.e-olymp.com/content/02/02d9fa3b52e82f901a596243030b866a7fb59d50.jpg}
Наш хороший знакомый Микки-Маус имеет лес из \textbf{N} вершин. Микки-Маус хочет выполнять над этими вершинами следующие \textbf{3 }операции:
\textbf{0} - Нарисовать ребро между двумя вершинами.\textbf{1} - Стереть последние \textbf{X} нарисованных рёбер.\textbf{2} - Дать ответ на вопрос, существует ли произвольный путь между двумя вершинами.
Помогите Микки-Маусу быстро отвечать на \textbf{3}-тью оперцию.
\InputFile
В первой строке задано \textbf{N} (\textbf{1} ≤ \textbf{N} ≤ \textbf{10^5}) -- количество вершин, в следующей строяке число \textbf{Q} (\textbf{1} ≤ \textbf{Q} ≤ \textbf{10^5}) -- количество запросов трёх типов. В процессе обработки необходимо поддерживать число \textbf{p}, вначале оно равно \textbf{0}. Каждая запись типа \textbf{0} и \textbf{2} задаётся тройкой чисел \textbf{0 x_i y_i}, для получения номеров вершин, между которыми нужно нарисовать ребро или найти путь, задаётся следующим образом:
\textbf{A_i = ((x_i + p + i) mod N) + 1, B_i = ((y_i + 1 -- p + i) mod N) + 1 (1} ≤ \textbf{A}_i\textbf{, x}_i\textbf{, B}_i\textbf{, y}_i ≤ \textbf{N).}
Запросы типа \textbf{1} задаются парой чисел \textbf{1 x_i}. \textbf{x_i}_\{ \} не больше, чем количество нарисованных на данный момент рёбер. После каждого запроса типа \textbf{2},\textbf{ p} присваивается результат (\textbf{YES = 1}, \textbf{NO = 0}).
\OutputFile
Для каждого запроса типа \textbf{2} вывести "\textbf{YES}" (без кавычек), если существует путь между двумя вершинами, иначе "\textbf{NO}" (без кавычек), если пути не существует.
Входные данные #1
6 11 0 1 4 0 5 6 0 3 1 2 4 5 0 4 4 2 4 2 1 1 2 4 1 0 4 2 0 3 5 2 6 2
Выходные данные #1
NO YES YES YES