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

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

1 секунда
64 мегабайти
Складна

У нашого друга Міккі Мауса є ліс, що складається з вершин. Міккі хоче виконати такі три операції над цими вершинами:

  1. Провести ребро між двома вершинами.

  2. Стерти останні проведених ребер.

  3. Перевірити, чи існує шлях між двома вершинами.

Ваше завдання — допомогти Міккі швидко відповідати на операцію третього типу.

Вхідні дані

Перший рядок містить (1 \leq N \leq 10^5) — кількість вершин.

Другий рядок містить (1 \leq Q \leq 10^5) — кількість запитів трьох типів.

Під час обробки необхідно підтримувати змінну , яка спочатку дорівнює . Кожний запит типу та задається трійкою чисел 0~x_i~y_i, яка визначає номери вершин, між якими потрібно провести ребро або перевірити шлях. Вони обчислюються так:

  • A_i = ((x_i + p + i) \bmod N) + 1

  • B_i = ((y_i + 1 - p + i) \bmod N) + 1

1 \leq A_i,~x_i,~B_i,~y_i \leq N.

Запити типу задаються парою чисел 1~x_i, де x_i не перевищує кількість проведених на цей момент ребер.

Після кожного запиту типу слід оновити відповідно до результату (YES , NO ).

Вихідні дані

Для кожного запиту типу виведіть "YES" (без лапок), якщо шлях між двома вершинами існує, інакше "NO" (без лапок), якщо шляху немає.

Приклади

Приклад 1

Loading
Loading