F. Сделай симметричным
ограничение по времени на тест
6 секунд
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Рассмотрим множество точек $$$A$$$, изначально пустое. Есть три типа запросов:

  1. Добавить точку $$$(x_i, y_i)$$$ в множество $$$A$$$. Гарантируется, что эта точка не принадлежит $$$A$$$ в данный момент.
  2. Удалить точку $$$(x_i, y_i)$$$ из $$$A$$$. Гарантируется, что эта точка принадлежит $$$A$$$ в данный момент.
  3. Дана точка $$$(x_i, y_i)$$$, нужно найти минимальное количество точек, которые нужно добавить в множество $$$A$$$ для того, чтобы сделать $$$A$$$ симметричным относительно прямой, проходящей через точки $$$(0, 0)$$$ и $$$(x_i, y_i)$$$. Обратите внимание, что эти точки на самом деле не добавляются в $$$A$$$, то есть запросы независимы друг от друга.
Входные данные

Первая строка содердит одно целое число $$$q$$$ ($$$1 \le q \le 2 \cdot 10^5$$$) — количество запросов.

Каждая из следующих $$$q$$$ описывает запрос и содержит три целых числа $$$t_i$$$, $$$x_i$$$ и $$$y_i$$$ ($$$ t_i \in \{1, 2, 3\}$$$, $$$1 \le x_i, y_i \le 112\,904$$$) — тип запроса и координаты точек. Тип $$$1$$$ — это добавление точки, тип $$$2$$$ — удаление точек, а тип $$$3$$$ — это запрос на подсчёт минимального количества точек, необходимого для того, чтобы сделать $$$A$$$ симметричным.

Гарантируется, что дано не более $$$10^5$$$ запросов типа $$$3$$$ и не более $$$10^5$$$ запросов типов $$$1$$$ и $$$2$$$ суммарно.

Выходные данные

Для каждого запроса третьего типа выведите одно целое число в отдельной строке — ответ на запрос.

Примеры
Входные данные
12
1 1 6
1 6 1
1 5 5
1 2 3
3 4 4
1 3 2
3 7 7
2 2 3
2 6 1
3 8 8
2 5 5
3 1 1
Выходные данные
1
0
2
2
Входные данные
6
1 1 2
3 1 1
1 1 1
3 2 2
2 1 1
3 2 4
Выходные данные
1
1
0
Примечание

Первый пример показан на рисунке ниже.