eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

Малюємо і стираємо

Малюємо і стираємо

\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 секунда
Ліміт використання пам'яті 64 MiB
Вхідні дані #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
Автор Остап Столярчук
Джерело Дистанційна Літня Комп`ютерна Школа - літо 2013 року