우주선 방어 (큰 입력)

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

보통7최단 경로그래프아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

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

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

터보리프트는 한 방에서 다른 한 방으로 병사를 옮기며, 정해진 시간이 걸린다. 터보리프트는 한 방향으로만 움직인다. 방 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_itit_i초 만에 병사를 옮기는 터보리프트가 있다는 뜻이다.

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

제한

  • 1T101 \le T \le 10
  • 1N800001 \le N \le 80000
  • 0M30000 \le M \le 3000
  • 1S1001 \le S \le 100
  • 1ai,biN1 \le a_i, b_i \le N
  • 0ti10000 \le t_i \le 1000
  • 1pj,qjN1 \le p_j, q_j \le N

출력

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