EduBrick

F. Всем чмоки в этом чатике

1000 мс · 256 МБ · всё или ничего

В соцсети nn пользователей, каждый в начале дня сидит в своём чате один. Происходят события трёх видов: участник пишет сообщение всем в своём чате (включая себя), два чата сливаются, участник спрашивает, сколько сообщений он не прочитал, и читает их.

Номера участников зашифрованы переменной zerg, которая меняется после каждого события, — значит обработать события заранее и оптом не выйдет, только по одному и по порядку.

Формат ввода

В первой строке nn и mm (1≤n≤1051 \le n \le 10^5, 1≤m≤3⋅1051 \le m \le 3 \cdot 10^5). В каждой из следующих mm строк — тип события tt и его аргументы.

Переменная zergzerg в начале дня равна нулю, p=106+3p = 10^6 + 3.

  • 1 i (0≤i<n0 \le i < n): участник (i+zerg) mod n(i + zerg) \bmod n пишет сообщение всем в своём чате, включая себя; затем zerg←(30⋅zerg+239) mod pzerg \leftarrow (30 \cdot zerg + 239) \bmod p.
  • 2 i j (0≤i,j<n0 \le i, j < n): участники (i+zerg) mod n(i + zerg) \bmod n и (j+zerg) mod n(j + zerg) \bmod n. Если они в одном чате, не происходит ничего. Иначе чаты сливаются и zerg←(13⋅zerg+11) mod pzerg \leftarrow (13 \cdot zerg + 11) \bmod p.
  • 3 i (0≤i<n0 \le i < n): участник (i+zerg) mod n(i + zerg) \bmod n узнаёт число непрочитанных qq и читает их; затем zerg←(100500⋅zerg+q) mod pzerg \leftarrow (100500 \cdot zerg + q) \bmod p.

Формат вывода

Для каждого события третьего типа выведите число непрочитанных сообщений в отдельной строке.

Примеры

ввод
4 10
1 0
1 2
1 1
1 2
3 1
2 1 2
1 3
3 3
2 3 2
3 2
вывод
1
1
2
Разбор идеи от автора задачи. Сначала попробуйте сами.
Войдите, чтобы отправлять решения.