#include <bits/stdc++.h>   #pragma GCC optimize( Ofast ,  unroll-loops )   using namespace std;   const int inf = numeric_limits<int>::max() / 2;   const long double eps = 1e-9;   const long double pi = acos(-1);   inline void solve(), read();   int main() {     ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);     read();     solve();     return 0;   }   pair<int, int> operator+(pair<int, int> p1, pair<int, int> p2) {     return {p1.first + p2.first, p1.second + p2.second};   }   int q;   map<pair<int, int>, int> l, s;   map<int, set<pair<int, int>>> qs;   int n = 0;   int gcd(int a, int b) {     while (b != 0) {       a %= b;       swap(a, b);     }     return a;   }   pair<int, int> getp(pair<int, int> p) {     int g = gcd(p.first, p.second);     return {p.first / g, p.second / g};   }   void add(pair<int, int> p) {     ++n;     pair<int, int> t = getp(p);     ++l[t];     int d = p.first * p.first + p.second * p.second;     for (pair<int, int> q : qs[d]) {       pair<int, int> u = getp(p + q);       ++s[u];     }     qs[d].insert(p);   }   void del(pair<int, int> p) {     --n;     pair<int, int> t = getp(p);     --l[t];     int d = p.first * p.first + p.second * p.second;     qs[d].erase(p);     for (pair<int, int> q : qs[d]) {       pair<int, int> u = getp(p + q);       --s[u];     }   }   int get(pair<int, int> p) {     pair<int, int> t = getp(p);     return n - l[t] - 2 * s[t];   }   inline void solve() {     for (int i = 0; i < q; i++) {       int t;       pair<int, int> p;       cin >> t >> p.first >> p.second;       if (t == 1) {         add(p);       } else if (t == 2) {         del(p);       } else if (t == 3) {         int ans = get(p);         cout << ans <<   n ;       }     }   }   inline void read() { cin >> q; }   