만드는 중입니다

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

번역의 사슬

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

요약
번역가를 가중 무향 간선으로 보고, 각 목표 언어의 영어로부터의 번역 횟수를 먼저 최소화한 뒤 전체 요금을 최소화하는 집합을 고른다.
난이도

보통10점 중 6점

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

문제

당신은 "프로그래밍 대회에서 이기는 법"이라는 책을 막 탈고했고, 여러 나라에서 번역 요청이 들어오고 있다. 프로그래밍 언어는 여럿 다루지만 사람이 쓰는 말은 거의 모른다. 알아보니 두 언어 사이를 번역해 주는 사람이 여럿 있고, 받는 비용은 사람마다 다르다. 번역을 여러 번 거쳐야 하는 경우도 있다. 영어에서 스웨덴어로 바로 옮겨 줄 사람이 없더라도, 영어를 프랑스어로 옮길 사람과 프랑스어를 스웨덴어로 옮길 사람이 있으면 스웨덴어판을 만들 수 있다.

번역 비용의 합을 줄이는 것도 중요하지만, 더 중요한 조건은 각 목표 언어가 영어에서 몇 번의 번역을 거쳐 나오는지를 최소로 만드는 것이다. 번역을 한 번 거칠 때마다 오류가 쌓이기 때문이다. 따라서 먼저 모든 목표 언어에 대해 영어로부터의 번역 횟수를 각각 최소로 맞추고, 그 조건을 지키는 방법 중에서 번역가에게 지불하는 비용의 합이 가장 작은 것을 고른다.

번역가 한 명을 쓰면 그 비용을 한 번 지불하고, 그 사람이 맡은 두 언어 사이를 양쪽 방향 모두 옮길 수 있다.

입력

첫 줄에 목표 언어의 수 nn과 번역가의 수 mm이 공백으로 구분되어 주어진다 (1≤n≤1001 \le n \le 100, 1≤m≤45001 \le m \le 4500).

둘째 줄에 목표 언어 nn개의 이름이 공백으로 구분되어 주어진다.

이어지는 mm개의 줄에는 번역가 한 명이 l1 l2 c 형식으로 주어진다. l1l_1과 l2l_2는 서로 다른 언어이고, cc는 두 언어 사이를 어느 방향으로든 옮기는 비용을 나타내는 정수이다 (1≤c≤1091 \le c \le 10^9).

l1l_1과 l2l_2는 언제나 English이거나 목표 언어 중 하나이며, 같은 언어 쌍은 입력에 최대 한 번 나온다. 언어 이름은 공백이 없는 문자열이다. 원본 책은 언제나 English로 쓰여 있다.

출력

위 조건을 지키면서 모든 목표 언어로 책을 번역하는 데 드는 최소 비용을 한 줄에 출력한다. 모든 목표 언어를 얻는 것이 불가능하면 Impossible을 출력한다.

예제3

  1. 예제 1

    입력
    4 6
    Pashto French Amheric Swedish
    English Pashto 1
    English French 1
    English Amheric 5
    Pashto Amheric 1
    Amheric Swedish 5
    French Swedish 1
    
    예상 출력
    8
    
  2. 예제 2

    입력
    2 1
    A B
    English B 1
    
    예상 출력
    Impossible
    
  3. 예제 3

    입력
    1 1
    Swedish
    English Swedish 7
    
    예상 출력
    7