만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

퍼즐 「슈퍼부분문자열」

시간 제한2초메모리 제한1024 MB

요약
주어진 문자열 t로 여러 문자열 s를 만들 때, t의 부분 문자열들을 이어 붙여 조각 수가 가장 적은 분할을 찾아 출력하고, 불가능하면 NO를 출력합니다.
난이도

어려움10점 중 8점

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

문제

세료자는 평범한 소년이다. 이번에는 「슈퍼부분문자열」이라는 어려운 퍼즐을 선물 받았다. 그는 퍼즐 풀기를 좋아하지만, 풀지 못하면 많이 슬퍼한다. 부모는 그가 슬퍼하지 않기를 바라므로, 이 퍼즐에 해가 있는지 알고 싶어 한다.

문자열 ss가 문자열 tt의 슈퍼부분문자열이라는 것은, 다음 두 조건을 만족하는 문자열들의 수열 r1,r2,…,rkr_1, r_2, \ldots, r_k가 존재한다는 뜻이다.

  1. s=r1r2…rks = r_1 r_2 \ldots r_k (ss는 rir_i들을 이어 붙인 것이다)
  2. 각 rir_i는 tt의 부분문자열이다

퍼즐은 ss가 tt의 슈퍼부분문자열일 때에만 해가 있다. 이 수열 r1,r2,…,rkr_1, r_2, \ldots, r_k를 퍼즐의 해라고 한다. 해 중에서 kk가 가장 작은 것을 최적의 해라고 한다.

같은 tt에 대해 NN개의 퍼즐이 주어진다. 각 퍼즐에 해가 있는지 판별하고, 해가 있으면 최적의 해 하나를 구하라.

입력

첫째 줄에 문자열 tt (1≤∣t∣≤1061 \le |t| \le 10^6)가 주어진다.

둘째 줄에 퍼즐의 개수 NN (1≤N≤1061 \le N \le 10^6)이 주어진다.

이후 NN개의 줄에 각각 문자열 sis_i (1≤∣si∣≤1061 \le |s_i| \le 10^6)가 주어진다. 모든 sis_i의 길이 합은 2⋅1062 \cdot 10^6을 넘지 않는다.

모든 문자열은 소문자 라틴 알파벳의 처음 10개 글자로만 이루어져 있다.

출력

NN개의 줄에 각 퍼즐의 답을 출력한다. 해가 없는 퍼즐은 NO를 출력한다. 해가 있으면 해의 원소 r1,r2,…,rkr_1, r_2, \ldots, r_k를 문자 |로 구분하여 출력한다.

예제2

  1. 예제 1

    입력
    abacaba
    3
    cabab
    dabacaba
    aaaaaa
    
    예상 출력
    cab|ab
    NO
    a|a|a|a|a|a
    
  2. 예제 2

    입력
    aaaaa
    2
    aa
    aaaaaa
    
    예상 출력
    aa
    aaa|aaa