만드는 중입니다

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

거대 펭귄

시간 제한3초메모리 제한512 MB

요약
각 정점이 최대 k개의 단순 사이클에 속하는 연결 그래프에서 정점 표시와 가장 가까운 표시 정점까지의 거리 질의를 처리합니다.
난이도

어려움10점 중 9점

유형
그래프, 트리, 분할 정복, 최단 경로
정답자
아직 제출이 없습니다

문제

펭수는 유명한 거대한 한국 펭귄이다. 그는 매우 무례하고 노래를 좋아한다.

이번에도 펭수는 그래프 질의를 처리하고 있다.

펭수에게는 연결된 무방향 그래프가 있다. 각 정점은 정점이 중복되지 않는 단순 사이클을 최대 kk개만 지난다.

펭수는 다음 두 종류의 질의에 답하고 싶어 한다.

  • 정점 vv에 표시를 한다.
  • 정점 vv에서 가장 가까운 표시된 정점까지의 거리를 구한다. 이 질의가 주어질 때에는 표시된 정점이 하나 이상 있다고 보장된다.

펭수는 매우 게을러서 낮잠을 자기로 했고, 그래서 당신에게 이 질의들을 처리해 달라고 부탁했다. 그가 깨기 전에 끝내지 못하면 그는 당신을 괴롭힐 테니 서둘러 주기 바란다.

입력

첫 줄에 세 정수 nn, mm, kk가 주어진다 (1≤n≤1000001 \le n \le 100000, n−1≤m≤200000n-1 \le m \le 200000, 0≤k≤100 \le k \le 10). 각각 정점의 수, 간선의 수, 한 정점을 지나는 정점 단순 사이클의 최대 개수이다.

이어서 mm개의 줄에 각각 두 정수 uiu_i, viv_i (1≤ui,vi≤n1 \le u_i, v_i \le n, ui≠viu_i \ne v_i)가 주어지며, uiu_i와 viv_i를 잇는 간선을 뜻한다. 다중 간선은 없고, 그래프는 연결되어 있으며, 각 정점은 최대 kk개의 정점 단순 사이클에만 속한다고 보장된다.

다음 줄에는 질의의 수 qq (1≤q≤2000001 \le q \le 200000)가 주어진다.

이어서 qq개의 줄에 각각 두 정수 tit_i, viv_i (1≤ti≤21 \le t_i \le 2, 1≤vi≤n1 \le v_i \le n)가 주어진다. ti=1t_i = 1이면 정점 viv_i에 표시를 한다. 이 정점은 이전에 표시된 적이 없다고 보장된다. ti=2t_i = 2이면 viv_i에서 가장 가까운 표시된 정점까지의 거리를 출력한다. 이때 표시된 정점이 적어도 하나 있다고 보장된다.

출력

ti=2t_i = 2인 각 질의에 대해, 가장 가까운 표시된 정점까지의 거리를 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    5 4 0
    1 2
    2 3
    3 4
    4 5
    7
    1 1
    1 5
    2 1
    2 2
    2 3
    2 4
    2 5
    
    예상 출력
    0
    1
    2
    1
    0
    
  2. 예제 2

    입력
    5 6 2
    1 2
    2 3
    1 3
    3 4
    4 5
    3 5
    3
    1 1
    2 4
    2 5
    
    예상 출력
    2
    2