번역의 사슬

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

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

문제

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

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

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

입력

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

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

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

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

출력

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