만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

그래프 자르기

시간 제한4초메모리 제한2048 MB

요약
정점 집합 U에 정점을 넣거나 빼는 질의를 처리하고, U와 나머지 정점을 잇는 간선을 하나 삭제하거나 없으면 0을 출력하는 문제입니다.
난이도

어려움10점 중 8점

유형
그래프, 해시맵, 비트 연산
정답자
아직 제출이 없습니다

문제

방향이 없는 그래프가 주어진다. 이 그래프에는 다중 간선과 자기 루프가 없다. 또한 이 그래프의 정점 집합 UU가 있으며, 처음에는 비어 있다. 다음 세 종류의 질의에 답하라.

질의

  1. "+ vv": 정점 vv를 UU에 추가한다. v∉Uv \not\in U가 보장된다.
  2. "- vv": 정점 vv를 UU에서 제거한다. v∈Uv \in U가 보장된다.
  3. "?": 양 끝점 중 정확히 하나만 UU에 속하는 간선을 하나 찾아 그래프에서 제거한다. 그런 간선이 없으면 그렇다고 판단한다. 조건을 만족하는 간선이 여럿이면 그중 아무거나 골라도 된다.

입력

첫 줄에 정점 수 nn과 간선 수 mm이 주어진다 (0≤n,m≤1050 \le n, m \le 10^5). 다음 mm개 줄에는 방향이 없는 간선의 양 끝점 uu, vv가 주어진다 (1≤u,v≤n1 \le u, v \le n). 다중 간선과 자기 루프는 없다.

다음 줄에 질의의 수 qq가 주어진다 (0≤q≤1050 \le q \le 10^5). 다음 qq개 줄에는 위에서 설명한 형식의 질의가 주어진다 (1≤v≤n1 \le v \le n).

출력

세 번째 종류의 질의마다 제거한 간선의 입력 순서 번호를 출력한다. 그런 간선이 없으면 00을 출력한다.

예제1

  1. 예제 1

    입력
    4 5
    1 2
    1 3
    1 4
    2 3
    2 4
    10
    + 1
    + 2
    ?
    ?
    ?
    ?
    ?
    - 2
    ?
    ?
    
    예상 출력
    5
    4
    3
    2
    0
    1
    0