아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

단어 사다리

시간 제한1초메모리 제한256 MB

요약
한 글자만 다른 단어들을 이웃으로 이어 각 질의 쌍 사이 최단 사다리를 찾고 동률이면 사전 순으로 가장 앞선 사다리를 출력합니다.
난이도

보통10점 중 5점

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

문제

미니언들은 영어를 배우면서 어휘를 늘리려고 여러 놀이를 한다. 그중 하나가 단어 사다리다. 단어 사다리는 Lewis Carroll이 만든 말놀이이고, Doublets, word links, word golf라고도 부른다.

퍼즐은 단어 두 개로 시작한다. 두 단어를 잇는 단어의 사슬을 찾으면 퍼즐이 풀린다. 사슬에서 이웃한 두 단어는 정확히 한 글자만 달라야 한다.

예를 들어 COLD와 WARM이 주어지면 다음이 단어 사다리다.

COLD --> CORD --> CARD --> WARD --> WARM

다음도 단어 사다리다.

COLD --> WOLD --> WORD --> WARD --> WARM

주어진 두 단어를 잇는 가장 짧은 사다리를 찾은 사람이 이긴다. 단어 수가 같은 사다리를 두 사람이 찾았다면 사다리를 앞에서부터 한 단어씩 비교한다. 처음으로 달라지는 자리에서 사전순으로 앞서는 단어를 쓴 사람이 이긴다. 위의 두 사다리를 비교하면 CORD가 WOLD보다 앞서므로 첫 번째 사다리가 이긴다.

미니언 Kevin은 사전을 하나 정해 놓고 논다. 사다리에 쓰는 단어는 양 끝의 두 단어까지 포함해 모두 그 사전에 있어야 한다. 두 단어는 길이가 같고 정확히 한 자리만 다를 때에만 이웃이다. 길이가 다른 두 단어는 이웃이 아니다. Kevin이 이길 수 있도록 단어 쌍마다 사다리를 찾아라.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다.

각 테스트 케이스는 사전 하나와 단어 쌍의 목록으로 이루어진다. 먼저 사전에 든 단어의 수 NN이 주어지고, 이어서 단어 NN개가 주어진다. 그다음 사다리를 찾아야 하는 쌍의 수 QQ가 주어지고, 이어서 쌍 QQ개가 주어진다. 쌍 하나는 단어 두 개다.

모든 수와 단어는 공백이나 줄바꿈으로 구분되고, 줄을 나누는 방식은 정해져 있지 않다. 단어는 영어 소문자로만 이루어진다(Gru가 아니라 gru).

  • 1≤T≤91 \le T \le 9
  • 1≤N≤10001 \le N \le 1000
  • 1≤Q≤201 \le Q \le 20
  • 단어의 길이는 11 이상 1010 이하다.
  • 한 사전 안의 단어는 서로 다르다.
  • 각 쌍의 두 단어는 모두 그 사전에 들어 있다.

출력

쌍마다 입력에 주어진 순서대로 한 줄씩 출력한다.

사다리가 있으면 다음 형식으로 출력한다.

Word ladder from A to B: w1 --> w2 --> ... --> wk

AA는 쌍의 첫 단어, BB는 둘째 단어이고 w1,…,wkw_1, \dots, w_k는 사다리를 이루는 단어다. 단어 수가 가장 적은 사다리를 출력하고, 그런 사다리가 여럿이면 단어 나열이 사전순으로 가장 앞서는 것을 출력한다. 사다리의 단어는 -->(공백, 하이픈 두 개, >, 공백)로 잇는다.

사다리가 없으면 다음을 출력한다.

No word ladder from A to B using the input dictionary.

AA와 BB가 같은 단어이면 사다리는 그 단어 하나뿐이므로 Word ladder from A to A: A 형태가 된다.

예제3

  1. 예제 1

    입력
    2
    6 abc abd acd bcd bdd xyz 2 abc bdd abc xyz
    10 man can con bow cow mow han ban bon how 1 man how
    
    예상 출력
    Word ladder from abc to bdd: abc --> abd --> acd --> bcd --> bdd
    No word ladder from abc to xyz using the input dictionary.
    Word ladder from man to how: man --> ban --> bon --> bow --> how
    
  2. 예제 2

    입력
    1
    1 a 1 a a
    
    예상 출력
    Word ladder from a to a: a
    
  3. 예제 3

    입력
    1
    5 cat cot cog dog bird 3 cat dog cat bird bird bird
    
    예상 출력
    Word ladder from cat to dog: cat --> cot --> cog --> dog
    No word ladder from cat to bird using the input dictionary.
    Word ladder from bird to bird: bird