만드는 중입니다

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

우주선 방어 (큰 입력)

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

요약
같은 색 방 사이는 무료로 순간이동하고 방향이 정해진 터보리프트를 타고 이동하며 각 병사의 출발 방에서 도착 방까지 최단 시간을 구합니다.
난이도

보통10점 중 7점

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

문제

적이 우주선에 침입했다. 병사들은 두 가지 장치로 우주선 안을 이동한다. 하나는 텔레포터이고, 다른 하나는 터보리프트다.

방마다 텔레포터가 하나씩 있고, 방에는 색이 하나씩 정해져 있다. 어떤 방에 있는 병사는 그 방의 텔레포터로 색이 같은 다른 방 어디로든 즉시 이동한다. 이 이동에는 시간이 걸리지 않는다.

터보리프트는 한 방에서 다른 한 방으로 병사를 옮기며, 정해진 시간이 걸린다. 터보리프트는 한 방향으로만 움직인다. 방 aa에서 방 bb로 병사를 옮기는 터보리프트는 방 bb에서 방 aa로는 병사를 옮기지 못하지만, 그 일을 하는 다른 터보리프트가 따로 있을 수는 있다. 한 터보리프트를 여러 병사가 함께 쓸 수 있고, 서로 방해하지 않는다.

병사 여러 명의 출발 방과 목적지 방이 주어진다. 각 병사가 출발 방에서 목적지 방까지 가는 데 걸리는 최소 시간을 구하라.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 줄에는 방의 개수 NN이 주어진다. 방 번호는 1번부터 NN번까지다. 다음 NN개의 줄에는 1번 방부터 NN번 방까지의 색이 순서대로 한 줄에 하나씩 주어진다. 각 색은 길이가 1 또는 2인 문자열이고, 알파벳 소문자 a부터 z까지와 숫자 0부터 9까지만 쓴다.

다음 줄에는 터보리프트의 개수 MM이 주어진다. 다음 MM개의 줄에는 각각 공백으로 구분된 세 정수 aia_i, bib_i, tit_i가 주어진다. 방 aia_i에서 방 bib_i로 tit_i초 만에 병사를 옮기는 터보리프트가 있다는 뜻이다.

다음 줄에는 병사의 수 SS가 주어진다. 다음 SS개의 줄에는 각각 두 정수 pjp_j와 qjq_j가 주어지며, 이는 병사 한 명의 출발 방과 목적지 방이다.

제한

  • 1≤T≤101 \le T \le 10
  • 1≤N≤800001 \le N \le 80000
  • 0≤M≤30000 \le M \le 3000
  • 1≤S≤1001 \le S \le 100
  • 1≤ai,bi≤N1 \le a_i, b_i \le N
  • 0≤ti≤10000 \le t_i \le 1000
  • 1≤pj,qj≤N1 \le p_j, q_j \le N

출력

각 테스트 케이스마다 먼저 Case #x: 한 줄을 출력한다. 여기서 xx는 1부터 시작하는 테스트 케이스 번호다. 그다음 SS개의 줄을 출력한다. jj번째 줄에는 병사가 방 pjp_j에서 방 qjq_j까지 가는 데 걸리는 최소 시간을 초 단위 정수로 출력한다. 갈 수 있는 경로가 없으면 -1을 출력한다.

예제1

  1. 예제 1

    입력
    3
    3
    gl
    t3
    t3
    3
    1 2 217
    3 2 567
    1 1 21
    2
    2 1
    2 3
    4
    ca
    bl
    bl
    8z
    0
    3
    1 2
    2 3
    1 1
    8
    re
    b7
    ye
    gr
    0l
    0l
    ye
    b7
    7
    4 1 19
    2 4 21
    2 5 317
    4 5 34
    4 7 3
    4 8 265
    8 6 71
    3
    4 3
    2 6
    1 4
    
    예상 출력
    Case #1:
    -1
    0
    Case #2:
    -1
    0
    0
    Case #3:
    3
    55
    -1