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

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

차수 k의 알파 관계

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

요약
사전이 주어질 때, 각 단계에서 길이 k 이상의 접미사와 접두사가 겹치는 단어 연결을 이용해 s에서 t로 가는 최단 사슬의 길이를 L 이하인지 판정하는 문제다.
난이도

어려움10점 중 8점

유형
그래프, BFS, 문자열 매칭, 문자열
정답자
아직 제출이 없습니다

문제

두 문자열 ss와 tt에 대하여, 길이가 kk 이상인 ss의 접미사(suffix) 중 tt의 접두사(prefix)와 일치하는 것이 존재할 때, 그리고 그때에만 "차수 kk의 알파 관계"가 성립한다고 하며 이를 s→αkts \xrightarrow{\alpha^k} t로 표기한다. 알파 관계는 k=0k = 0일 때는 정의되지 않는다.

예를 들어 "telnet"은 "network"와 α3\alpha^3 관계이다("telnet"의 접미사 "net"이 "network"의 접두사이다). 또한 "block"은 "locker"와 α4\alpha^4 관계이다(따라서 α3\alpha^3, α2\alpha^2, α1\alpha^1 관계이기도 하다. "block"의 접미사 "lock"이 "locker"의 접두사이다).

단어 ss에서 단어 tt로 가는 길이 LL(L>0L > 0)의 αk\alpha^k 사슬(chain)이란, 첫 단어가 ss, 마지막 단어가 tt이고 인접한 두 단어 사이마다 αk\alpha^k 관계가 성립하는 L+1L+1개의 단어 목록을 뜻한다. 예를 들어 다음은 "cartoon"에서 "manual"로 가는 길이 44의 α2\alpha^2 사슬이다.

cartoon→α2one→α2new→α2newsman→α2manualcartoon \xrightarrow{\alpha^2} one \xrightarrow{\alpha^2} new \xrightarrow{\alpha^2} newsman \xrightarrow{\alpha^2} manual

단어 사전 CC와 여러 개의 질의가 주어진다. 각 질의는 사전에 속한 두 단어 ss, tt와 두 정수 kk, LL로 이루어진다. 각 질의에 대하여, CC의 단어만을 사용하고 길이가 LL을 넘지 않는 ss에서 tt로의 αk\alpha^k 사슬이 존재하는지 판별하고, 존재한다면 가장 짧은 사슬의 길이를 구하여라.

입력

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

각 테스트 케이스의 첫째 줄에는 두 정수 WW와 QQ가 주어진다. WW는 이 테스트 케이스의 사전에 있는 단어의 개수, QQ는 질의의 개수이다. 0<W<500000 < W < 50000, 0<Q<1000 < Q < 100이 보장된다.

이어지는 WW개의 줄에는 사전의 단어가 한 줄에 하나씩 주어진다. 모든 단어는 소문자 알파벳으로만 이루어지고, 공백을 포함하지 않으며, 길이는 최대 6464자이고, 같은 단어가 두 번 나오지 않는다.

그 다음 QQ개의 줄에는 각 질의가 주어진다. 각 줄에는 사전에 속한 두 단어 ss, tt와 두 정수 kk, LL이 하나의 공백으로 구분되어 주어진다.

출력

각 질의마다 정확히 한 줄을 출력한다.

aa를 테스트 케이스 번호(11부터 시작), bb를 해당 테스트 케이스 안에서의 질의 번호(역시 11부터 시작)라고 하자.

사전의 단어만을 사용하고 길이가 LL 이하인 ss에서 tt로의 αk\alpha^k 사슬이 존재하지 않으면 다음과 같이 출력한다.

a.b none

존재한다면, 가장 짧은 사슬의 길이(인접한 단어 사이의 단계 수)를 cc라 할 때 다음과 같이 출력한다.

a.b c

cc 값은 유일하게 결정되므로, 각 질의에 대한 정답 출력은 정확히 하나이다.

예제2

  1. 예제 1

    입력
    2
    8 3
    news
    perusal
    symbolic
    newspaper
    salon
    longstreet
    cartoon
    streetcar
    news cartoon 3 8
    news cartoon 3 4
    news cartoon 1 4
    2 2
    link
    blink
    blink link 3 10
    link blink 2 100
    
    예상 출력
    1.1 6
    1.2 none
    1.3 2
    2.1 1
    2.2 none
    
  2. 예제 2

    입력
    1
    2 1
    abcd
    cdef
    abcd cdef 2 5
    
    예상 출력
    1.1 1