동적 사이클 계산 쿼리
시간 제한6초메모리 제한1024 MB
간선을 추가하고 삭제하는 무방향 다중 그래프에서 두 간선이 정확히 같은 단순 사이클에 속하는지 판별합니다.
문제
자기 루프(self loop)가 없는 무방향 그래프의 간선 에 대해, 를 포함하는 모든 간선 단순 사이클의 집합을 라고 하자. 간선 단순 사이클은 한 정점에서 출발해 같은 정점으로 돌아오는 경로이다. 간선을 1개 이상 가지며, 같은 간선을 두 번 이상 지나지 않는다. 정의에 따라 단순 사이클에는 서로 다른 정점이 2개 이상 포함된다. 시작 정점 이외의 정점을 두 번 이상 지나는 것은 허용된다.
정점 개와 간선 개를 가지고, 자기 루프가 없는 그래프 가 주어진다. 정점은 1부터 까지 서로 다른 번호가, 간선은 1부터 까지 서로 다른 번호가 붙어 있다. 는 번호가 인 간선이다. 같은 두 정점을 잇는 간선이 여러 개 있을 수 있다.
다음 쿼리에 답하라.
- 1 i j: 와 를 각각 번호 , 인 간선이라고 하자. 이면 "1", 아니면 "0"을 출력한다. 두 간선 모두 이미 제거된 간선이 아님이 보장된다.
- 2 a b c d: 가장 최근에 출력한 1번 쿼리의 답이 "1"이면 정점 와 를 잇는 간선을, "0"이면 정점 와 를 잇는 간선을 추가한다. 이 쿼리가 번째 2번 쿼리라면, 추가된 간선의 번호는 이다.
- 3 i j: 가장 최근에 출력한 1번 쿼리의 답이 "1"이면 를, "0"이면 를 그래프에서 제거한다. 두 간선 모두 이미 제거된 간선이 아님이 보장된다.
첫 쿼리는 항상 1번 쿼리이다. 초기 간선과 2번 쿼리로 추가되는 간선은 모두 서로 다른 두 정점을 잇는다.
입력
첫 줄에 테스트 케이스의 개수 ()가 주어진다. 각 테스트 케이스의 첫 줄에는 정수 , , 가 주어진다 (, ). 이어서 개의 줄에 초기 간선의 두 끝점 , 가 주어진다 (, ). 그다음 개의 줄에 위에서 설명한 형식의 쿼리가 주어진다.
모든 테스트 케이스에 대해 의 합은 을 넘지 않는다.
출력
각 테스트 케이스마다 "Case #C"를 한 줄에 출력한다. 여기서 는 테스트 케이스 번호이다. 다음 줄에는 1번 쿼리의 답을 입력 순서대로 공백 없이 이어 붙여 출력한다.