가장 강력한 주문
시간 제한5초메모리 제한128 MB
라벨이 붙은 방향 그래프에서 별 노드에서 금 노드로 가는 경로의 라벨을 이어 붙인 문자열 중 사전순으로 가장 앞선 것을 구하고, 존재하지 않거나 최솟값이 정해지지 않으면 NO를 출력한다.
문제
아주 먼 옛날, 수많은 "마법 문양"을 고안한 마법사가 있었다. 그의 마법 문양 중 하나가 바닥에 그려진 방에서는 누구든 주문을 외워 마법을 쓸 수 있다. 어떤 방에서 쓸 수 있는 주문의 집합은 그 방에 그려진 문양에 따라 달라진다. 주어진 각 마법 문양에 대해, 그 문양으로 쓸 수 있는 가장 강력한 주문을 구하라.
주문은 소문자로 이루어진 문자열이다. 주문들 중에서는 사전순으로 더 앞서는 것이 더 강력하다. 문자열 가 문자열 보다 사전순으로 앞선다는 것은, 두 문자열이 처음으로 달라지는 위치에서 의 글자가 순서상 더 작거나, 혹은 가 의 접두사인 경우를 말한다. 예를 들어 "abcd"는 이므로 "abe"보다 앞서고, "abe"는 "abef"의 접두사이므로 "abef"보다 앞선다.
마법 문양은 서로 다른 번호가 매겨진 노드들과, 그것들을 잇는 화살표들로 이루어진 그림이다. 각 화살표에는 라벨이 붙어 있는데, 이는 소문자 문자열이다. 문양에는 두 개의 특별한 노드가 있으며, 각각 별 노드(star node)와 금 노드(gold node)라 부른다. 어떤 주문이 그 문양으로 쓸 수 있게 되는 것은, 별 노드에서 금 노드까지 화살표를 따라가는 어떤 경로의 라벨들을 순서대로 이어 붙인 것과 그 주문이 일치할 때, 그리고 오직 그때뿐이다.
아래 그림은 노드 4개와 화살표 7개로 이루어진 문양의 예이다.

여기서 노드 0이 별 노드이고 노드 2가 금 노드이다. 이 문양으로 쓸 수 있는 주문의 한 예는 "abracadabra"이며, 다음 경로에서 얻어진다.
0 --abra--> 1 --cada--> 3 --bra--> 2
또 다른 예는 "oilcadabraketdadabra"이며, 다음 경로에서 얻어진다.
0 --oil--> 1 --cada--> 3 --bra--> 2 --ket--> 3 --da--> 3 --da--> 3 --bra--> 2
"abracadabra"는 "oilcadabraketdadabra"보다 사전순으로 앞서므로 더 강력하다. 실제로 이 문양으로 쓸 수 있는 다른 어떤 주문도 "abracadabra"보다 강력하지 않으므로, 이 문양의 답은 "abracadabra"이다.
가장 강력한 주문을 정할 수 없는 경우에는 "NO"라고 답하라. 그런 경우는 두 가지이다. 하나는 별 노드에서 금 노드로 가는 경로가 전혀 없는 경우이다. 다른 하나는 쓸 수 있는 모든 주문에 대해 항상 그보다 더 강력한 주문이 존재하는 경우이다. 아래 그림이 그 예이다. "ab"는 "b"보다 강력하고, "aab"는 "ab"보다 강력하며, 이런 식으로 계속된다. 어떤 주문이든 앞에 "a"를 붙이면 사전순으로 더 앞서는(따라서 더 강력한) 주문을 얻을 수 있다.

입력
입력은 최대 150개의 데이터셋으로 이루어진다. 각 데이터셋의 형식은 다음과 같다.
n a s g
x_1 y_1 lab_1
x_2 y_2 lab_2
...
x_a y_a lab_a
첫 줄에는 네 정수가 주어진다. 은 노드의 수, 는 화살표의 수이며, 와 는 각각 별 노드와 금 노드이다. 이어지는 개의 줄은 각각 하나의 화살표를 나타낸다. 줄 ""는 노드 에서 노드 로 가며 라벨이 인 화살표를 뜻한다.
값들은 다음을 만족한다. , , , 이며, 각 는 길이가 1 이상 6 이하인 소문자 문자열이다. 자기 자신으로 돌아오는 화살표()가 있을 수 있고, 같은 순서쌍의 노드를 잇는 화살표가 여러 개 있을 수도 있음에 유의하라.
입력의 끝은 네 개의 0으로 이루어진 줄 0 0 0 0으로 표시된다.
출력
각 데이터셋에 대해, 그 마법 문양의 가장 강력한 주문을 한 줄에 출력하라. 그러한 주문이 존재하지 않으면 "NO"(따옴표 제외)를 출력하라. 각 줄에는 그 외의 다른 문자가 있어서는 안 된다.