만드는 중입니다

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

우주선 방어 (Small)

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

요약
같은 색 방 사이는 무료로 순간이동하고 일방향 터보리프트로 이동하며 각 병사의 최단 이동 시간을 구합니다.
난이도

보통10점 중 5점

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

문제

적이 우주선에 침입했다. 뛰어난 전술만이 우주선을 지켜낼 수 있다. 병사가 우주선 안을 돌아다닐 때 쓰는 장치는 두 가지다. 순간이동기와 터보리프트다.

순간이동기는 병사를 즉시 다른 방으로 옮긴다. 모든 방에는 순간이동기가 하나씩 있고, 방마다 색이 하나씩 정해져 있다. 어떤 방에 있는 병사는 그 방의 순간이동기로 같은 색인 다른 방 어디로든 즉시 이동할 수 있다. 이때 걸리는 시간은 0초다.

터보리프트는 방과 방 사이를 더 느리게 오간다. 여러 방향으로 움직이는 승강기라고 보면 된다. 터보리프트 하나는 정해진 한 방에서 정해진 다른 한 방으로 병사를 옮기고, 옮기는 데 걸리는 시간이 정해져 있다. 터보리프트에는 다음 두 가지 성질이 있다.

  • 터보리프트는 한 방향으로만 움직인다. 방 aa에서 방 bb로 병사를 옮기는 터보리프트가 있어도, 같은 터보리프트로 방 bb에서 방 aa로 갈 수는 없다. 그 방향으로 움직이는 터보리프트가 따로 있을 수는 있다.
  • 여러 병사가 같은 터보리프트를 함께 쓸 수 있고, 서로 방해하지 않는다.

병사 여러 명의 현재 위치와 목적지가 주어진다. 각 병사가 현재 위치에서 목적지까지 가는 데 걸리는 최소 시간을 구하라.

입력

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

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

다음 줄에는 터보리프트의 개수 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≤10001 \le N \le 1000
  • 0≤M≤30000 \le M \le 3000
  • 1≤ai,bi≤N1 \le a_i, b_i \le N
  • 0≤ti≤10000 \le t_i \le 1000
  • 1≤S≤1001 \le S \le 100
  • 1≤pj,qj≤N1 \le p_j, q_j \le N

출력

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

예제2

  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
    
  2. 예제 2

    입력
    1
    6
    x
    y
    x
    z
    y
    w
    4
    1 2 10
    3 4 1
    5 6 2
    4 5 3
    4
    1 6
    2 4
    1 3
    6 1
    
    예상 출력
    Case #1:
    6
    -1
    0
    -1