쇼핑몰 방문객을 위한 스마트폰 안내 앱을 만들려고 한다. 현재 위치와 목적지를 넣으면 앱이 목적지까지 걸어야 하는 거리가 가장 짧은 경로를 미터 단위로 알려 준다.
쇼핑몰에는 여러 층에 걸쳐 장소가 N개 있고, 장소끼리는 도보 통로, 엘리베이터, 계단, 에스컬레이터로 이어져 있다. 세는 것은 방문객이 실제로 걸은 거리뿐이라서 이동 수단마다 비용이 다르다. 걸은 거리가 가장 짧은 경로가 에스컬레이터를 진행 방향과 거꾸로 거슬러 가는 경로일 수도 있다.
경로는 주어진 연결만 쓸 수 있다. 모든 장소는 서로 오갈 수 있다.
입력은 쇼핑몰 한 곳의 지도와 질의 목록으로 이루어진다.
첫째 줄에 장소의 수 N (N≤200)과 연결의 수 M (N−1≤M≤1000)이 주어진다. 장소에는 0번부터 N−1번까지 번호가 붙어 있다. 다음 N줄에는 장소의 층과 좌표 x, y가 한 줄에 하나씩 주어진다. 이웃한 두 층 사이의 거리는 5미터이고 x와 y도 미터 단위다. 두 장소 사이의 유클리드 거리는 층 높이 차이까지 넣어 3차원으로 잰다.
다음 M줄에는 두 장소를 직접 잇는 연결이 주어진다. 각 줄에는 두 장소의 번호와 이동 수단이 주어지고, 이동 수단은 walking, stairs, lift, escalator 중 하나다. 수단별 비용은 위 설명을 따른다. 에스컬레이터는 먼저 적힌 장소에서 나중에 적힌 장소로 가는 쪽이 진행 방향이다. 같은 층에 있는 두 장소의 이동 수단은 walking이다.
다음 줄에는 질의의 수 Q (1≤Q≤1000)가 주어진다. 다음 Q줄에는 질의마다 장소 두 개 a와 b가 주어진다.
질의마다 a에서 b까지 걸은 거리가 가장 짧은 경로를 한 줄에 출력한다. 지나는 장소의 번호를 순서대로 공백 하나로 구분해 적고, a와 b도 포함한다.
걸은 거리가 같은 경로가 여러 개면 장소 번호를 앞에서부터 견주어 사전순으로 가장 작은 것을 출력한다. a와 b가 같으면 그 번호 하나만 출력한다.