#line 1 "main.cpp" #include using namespace std; #line 6 "/home/hidehic0/src/github.com/hidehic0/library_cpp/templates/alias.hpp" template using VC = std::vector; using ll = long long; using ld = long double; using pii = std::pair; using vi = VC; using vvi = VC; using vvvi = VC; using vb = VC; using vvb = VC; using vf = VC; using vvf = VC; using vpii = VC; using vvpii = VC; using si = std::set; using spii = std::set; using mii = std::map; const std::string upperlist = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const std::string lowerlist = "abcdefghijklmnopqrstuvwxyz"; #define mp make_pair #define dms << " " << constexpr int MOD998 = 998244353; #line 4 "/home/hidehic0/src/github.com/hidehic0/library_cpp/templates/macro.hpp" #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rrep(i, n) for (int i = n - 1; i >= 0; i--) #define REP(i, a, b) for (int i = (int)(a); i < (int)(b); ++i) #define RREP(i, a, b) for (int i = (int)(b - 1); i >= (int)(a); i--) #define all(a) (a).begin(), (a).end() template bool chmin(T &a, T b) { if (a > b) { a = b; return true; } return false; } template bool chmax(T &a, T b) { if (a < b) { a = b; return true; } return false; } inline void input() {} template void input(H &h, T &...t) { std::cin >> h; input(t...); } template void input(std::vector &v) { for (int i = 0; i < v.size(); i++) { std::cin >> v[i]; } } inline void out() { std::cout << "\n"; } template void out(H &h, T &...t) { std::cout << h << " "; out(t...); } template void out(std::vector v) { for (int i = 0; i < v.size(); i++) { std::cout << v[i] << (i + 1 == v.size() ? "\n" : " "); } } template inline T ceil_div(T a, T b) { return (a + b - 1) / b; } template inline T mod_pow(T a, T n, T mod) { T res = 1; while (n) { if (n % 2 != 0) { res *= a; res %= mod; } a *= a; a %= mod; n >>= 1; } return res; } #line 6 "main.cpp" int main() { ll N, M; cin >> N >> M; map G1, G2; // G1: 自分がフォローしているリスト G2: 自分がフォローされているリスト ll O = N; // 公開アカウント数 map is_close; // 非公開か mii L; // 自分がフォローしているなかで公開アカウントの数 rep(_, M) { ll u, v; cin >> u >> v; G1[u].emplace(v); G2[v].emplace(u); } for (auto [k, l] : G1) { L[k] = l.size(); } ll Q; cin >> Q; while (Q--) { ll q, a, b; cin >> q >> a >> b; if (q == 1) { if (G1[a].count(b) == 1) { L[a] -= is_close[b] ^ 1; G1[a].erase(b); G2[b].erase(a); } else { L[a] += is_close[b] ^ 1; G1[a].emplace(b); G2[b].emplace(a); } } else { if (is_close[a]) { for (ll t : G2[a]) { L[t]++; } O++; } else { for (ll t : G2[a]) { L[t]--; } O--; } is_close[a] ^= 1; } cout << O + G1[a].size() - L[a] - !is_close[a] << "\n"; } }