Задачі
Малюємо і стираємо
Малюємо і стираємо
\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