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

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

A-to-Z

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

요약
단어 사전이 주어질 때, 각 글자 쌍마다 연속한 단어가 두 글자 이상 겹치고 첫 단어는 C1로 시작하며 마지막 단어는 C2로 끝나는 단어 사슬의 최소 전체 너비를 구한다.
난이도

어려움10점 중 8점

유형
그래프, 최단 경로, 문자열, 트라이
정답자
아직 제출이 없습니다

문제

A-to-Z는 초등학생들이 철자 실력을 기르고 어휘를 늘리기 위해 즐겨 하는 놀이다. 놀이에는 여러 개의 단어가 주어지며, 각 단어는 플라스틱 조각에 하나씩 적혀 있다. 두 사람은 서로 두 글자(이를 C1C_1과 C2C_2라 하자)를 고른 뒤, 한 개 이상의 단어로 이루어진 수열 W1,W2,…,WnW_1, W_2, \ldots, W_n으로 두 글자를 잇는다. 이때 첫 단어 W1W_1은 C1C_1로 시작하고, 마지막 단어 WnW_n은 C2C_2로 끝나야 한다.

이웃한 두 단어 (Wi,Wi+1)(W_i, W_{i+1})는 반드시 두 글자 이상 겹쳐야 한다. 단어 XX가 단어 YY와 kk글자만큼 겹친다는 것은, XX의 마지막 kk글자가 YY의 처음 kk글자와 완전히 같다는 뜻이다. 예를 들어 아래 그림에서 a는 두 단어로 이루어진 수열 against students로 s와 이어진다.

각 수열에는 벌점이 매겨진다. 벌점은 수열에 포함된 글자 수와 같되, 겹치는 글자는 한 번만 센다. (즉, 단어들을 최대한 겹치도록 늘어놓았을 때의 전체 너비와 같다.) 벌점이 작을수록 좋다. 그림에서 against students의 벌점은 13이고, about outside ideas의 벌점은 11이다.

단어 사전이 주어질 때, 주어진 두 글자를 잇는 수열의 가능한 최소 벌점을 구하여라.

입력

입력은 하나 이상의 테스트 케이스로 이루어진다. 각 테스트 케이스는 단어 사전과, 그 사전을 이용해 이을 글자 쌍(질의)들의 목록으로 구성된다.

각 테스트 케이스의 첫 줄에는 사전에 있는 단어의 개수를 나타내는 양의 정수 ww가 주어진다. 이어지는 ww개의 줄에는 각각 단어가 하나씩 주어진다. 단어는 소문자로만 이루어지며, 길이가 64를 넘지 않는다. 한 사전에는 최대 50000개의 단어가 있다.

사전 다음에는 질의의 개수 qq가 주어지고, 이어서 qq개의 줄이 온다. 각 질의 줄에는 두 소문자 C1C_1과 C2C_2가 공백으로 구분되어 주어진다.

입력의 끝은 정수 w=0w = 0만 있는 줄로 나타내며, 이 줄은 테스트 케이스에 포함되지 않는다.

출력

각 질의마다 한 줄씩 출력한다.

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

두 글자를 잇는 수열이 존재하면 a.b p를 출력한다. 여기서 pp는 사전 안의 모든 유효한 수열에 대한 최소 벌점이다. 두 글자를 잇는 수열이 존재하지 않으면 a.b 0을 출력한다.

비어 있지 않은 모든 수열의 벌점은 1 이상이므로, 0은 잇는 수열이 존재하지 않음을 분명하게 뜻한다. 실제 수열이 아니라 최소 벌점만 출력하면 된다.

예제1

  1. 예제 1

    입력
    9
    ones
    against
    students
    about
    outside
    other
    ideas
    added
    education
    3
    a s
    o s
    o t
    3
    aaabb
    aabbbb
    bbbbz
    2
    a z
    z a
    0
    
    예상 출력
    1.1 11
    1.2 4
    1.3 0
    2.1 7
    2.2 0