만드는 중입니다

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

전장의 형제들

면접 대비

시간 제한10초메모리 제한1024 MB

요약
각 도시를 윗면과 아랫면 기호를 잇는 간선으로 봅니다. 두 도시 사이의 최단 우호 관계 길이를 구하고, 연결되지 않으면 -1을 출력합니다.
난이도

보통10점 중 5점

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

문제

중세 시대에는 대부분의 도시가 인터넷에 접근할 수 없었기 때문에 도시 사이의 관계를 추적하기가 매우 어려웠다[citation needed]. 하지만 각 도시의 문장(紋章)을 살펴보면 두 도시가 서로 우호적인지 판단할 수 있었다. 모든 문장에는 두 개의 상징이 표시되었는데, 하나는 위쪽에, 다른 하나는 아래쪽에 있었다. 두 도시의 위쪽 상징이 같거나 아래쪽 상징이 같으면 두 도시는 우호적이다.

"내 친구의 친구는 나의 친구다"라는 말에 따라, 도시 c_0c\_0과 c_fc\_f는 0≤k<f0\leq k < f인 모든 kk에 대해 c_kc\_k와 c_k+1c\_{k+1}이 우호적이 되도록 하는 도시 c_1,…,c_f−1c\_1, \ldots, c\_{f-1}이 존재하면 간접적으로 우호적이다. c_0c\_0과 c_fc\_f가 서로 다르고 간접적으로 우호적이면, 이 정의를 따르는 가장 작은 ff를 두 도시의 우호도라고 한다. 예시는 그림 B.1을 참고하라.

이 문장들의 일부는 Wikimedia Commons에 CC BY-SA 4.0 라이선스로 공개되어 있다.

그림 B.1: 입력 예시 1의 설명. 도시 1과 2는 직접 우호적이고, 도시 2와 3도 그렇다. 도시 1과 3은 도시 2를 거쳐 간접적으로 우호적이므로 우호도가 2이다. 도시 4는 다른 어떤 도시와도 (간접적으로) 우호적이지 않다.

문장 목록과 질의 목록이 주어진다. 각 질의마다 주어진 두 도시의 우호도를 구하라.

입력

입력은 다음과 같이 주어진다.

첫 줄에 두 정수 nn과 ss가 주어진다 (2≤n≤90 0002\leq n\leq 90\,000, 2≤s≤3002\leq s\leq 300). nn은 도시의 수이고, ss는 어떤 도시의 문장에든 나타날 수 있는 상징의 개수이다.

이어지는 nn개 줄의 ii번째 줄에는 두 정수 tit_i와 bib_i (1≤ti,bi≤s1\leq t_i, b_i\leq s)가 주어진다. tit_i는 ii번째 도시 문장의 위쪽 상징이고, bib_i는 아래쪽 상징이다. i≠ji\neq j이면 ti≠tjt_i\neq t_j 또는 bi≠bjb_i\neq b_j이다.

다음 줄에 정수 qq (1≤q≤1051\leq q\leq 10^5)가 주어진다. 질의의 개수이다.

이어지는 qq개 줄의 ii번째 줄에는 두 정수 cc와 dd (1≤c,d≤n1\leq c, d\leq n, c≠dc\neq d)가 주어진다. 이 두 도시의 우호도를 구하라.

출력

각 질의마다 두 도시의 우호도를 나타내는 정수를 출력한다. 두 도시가 (간접적으로도) 우호적이지 않으면 −1-1을 출력한다.

예제3

  1. 예제 1

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

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

    입력
    2 4
    1 2
    3 4
    1
    1 2
    
    예상 출력
    -1