차수 k의 알파 관계
시간 제한1초메모리 제한128 MB
사전이 주어질 때, 각 단계에서 길이 k 이상의 접미사와 접두사가 겹치는 단어 연결을 이용해 s에서 t로 가는 최단 사슬의 길이를 L 이하인지 판정하는 문제다.
문제
두 문자열 와 에 대하여, 길이가 이상인 의 접미사(suffix) 중 의 접두사(prefix)와 일치하는 것이 존재할 때, 그리고 그때에만 "차수 의 알파 관계"가 성립한다고 하며 이를 로 표기한다. 알파 관계는 일 때는 정의되지 않는다.
예를 들어 "telnet"은 "network"와 관계이다("telnet"의 접미사 "net"이 "network"의 접두사이다). 또한 "block"은 "locker"와 관계이다(따라서 , , 관계이기도 하다. "block"의 접미사 "lock"이 "locker"의 접두사이다).
단어 에서 단어 로 가는 길이 ()의 사슬(chain)이란, 첫 단어가 , 마지막 단어가 이고 인접한 두 단어 사이마다 관계가 성립하는 개의 단어 목록을 뜻한다. 예를 들어 다음은 "cartoon"에서 "manual"로 가는 길이 의 사슬이다.
단어 사전 와 여러 개의 질의가 주어진다. 각 질의는 사전에 속한 두 단어 , 와 두 정수 , 로 이루어진다. 각 질의에 대하여, 의 단어만을 사용하고 길이가 을 넘지 않는 에서 로의 사슬이 존재하는지 판별하고, 존재한다면 가장 짧은 사슬의 길이를 구하여라.
입력
첫째 줄에 테스트 케이스의 개수 가 주어진다.
각 테스트 케이스의 첫째 줄에는 두 정수 와 가 주어진다. 는 이 테스트 케이스의 사전에 있는 단어의 개수, 는 질의의 개수이다. , 이 보장된다.
이어지는 개의 줄에는 사전의 단어가 한 줄에 하나씩 주어진다. 모든 단어는 소문자 알파벳으로만 이루어지고, 공백을 포함하지 않으며, 길이는 최대 자이고, 같은 단어가 두 번 나오지 않는다.
그 다음 개의 줄에는 각 질의가 주어진다. 각 줄에는 사전에 속한 두 단어 , 와 두 정수 , 이 하나의 공백으로 구분되어 주어진다.
출력
각 질의마다 정확히 한 줄을 출력한다.
를 테스트 케이스 번호(부터 시작), 를 해당 테스트 케이스 안에서의 질의 번호(역시 부터 시작)라고 하자.
사전의 단어만을 사용하고 길이가 이하인 에서 로의 사슬이 존재하지 않으면 다음과 같이 출력한다.
a.b none
존재한다면, 가장 짧은 사슬의 길이(인접한 단어 사이의 단계 수)를 라 할 때 다음과 같이 출력한다.
a.b c
값은 유일하게 결정되므로, 각 질의에 대한 정답 출력은 정확히 하나이다.