# チャッピーで翻訳 from bisect import bisect_left def zaatu(P): N = len(P) P_copy = P[:] P_copy.sort() P_copy2 = [] for x in P_copy: if not P_copy2 or P_copy2[-1] != x: P_copy2.append(x) P_copy = P_copy2 res = [] for i in range(N): res.append(bisect_left(P_copy, P[i])) return res # Step 1: 入力の受け取り P = [] #クエリに関係ある人 N, M = map(int, input().split()) U = [0] * M V = [0] * M for i in range(M): ui, vi = map(int, input().split()) U[i] = ui V[i] = vi P.append(ui) P.append(vi) Q = int(input()) query = [None] * Q for i in range(Q): a, b, c = map(int, input().split()) query[i] = (a, b, c) P.append(b) if c != -1: P.append(c) # Step 2: 入力の加工 G = zaatu(P) mp = {} # ユーザー番号対応表 mp[-1] = -1 for i in range(len(P)): mp[P[i]] = G[i] # ユーザー対応表に従って変更開始 for i in range(M): U[i] = mp[U[i]] V[i] = mp[V[i]] q2 = [] for i in range(Q): a, b, c = query[i] q2.append((a, mp[b], mp[c])) query = q2 # Step 3: クエリ解答への準備 S = [set() for _ in range(len(P) + 2)] for i in range(M): S[V[i]].add(U[i]) Status = [True] * (len(P) + 2) Private = set() # Step 4: クエリへの解答 for i in range(Q): q, a, b = query[i] # 操作 if q == 1: if a in S[b]: S[b].remove(a) else: S[b].add(a) if q == 2: if Status[a]: Status[a] = False Private.add(a) else: Status[a] = True Private.discard(a) # 問題への解答 Answer = 0 for p in Private: if a in S[p]: Answer += 1 Answer += N - len(Private) if a not in Private: Answer -= 1 print(Answer)