Головоломка <<Суперподстрока>>

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

요약
하나의 텍스트 t와 여러 질의 문자열이 주어질 때, 각 질의를 t의 부분문자열 조각으로 최소 개수로 나누고, 불가능하면 NO를 출력한다.
난이도

어려움10점 중 8점

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

문제

Серёжа --- обычный мальчик. На этот раз ему подарили сложную головоломку под названием <<Суперподстрока>>. Он, как и все дети, любит решать головоломки, но ему становится очень грустно, когда он не может их решить. Родители Сережи заботятся о нем и не хотят, чтобы он грустил, поэтому они хотят узнать, имеет ли решение новая головоломка.

Строка ss называется <<суперподстрокой>> строки tt, если существует такая последовательность строк r_1r\_1, r_2r\_2, …\ldots , r_kr\_k, удовлетворяющая следующим условиям:

  1. s=r_1r_2…r_ks = r\_1r\_2 \ldots r\_k (ss является конкатенацией строк r_ir\_i)
  2. каждая r_ir\_i является подстрокой строки tt

В головоломке даны две строки tt и ss, причем головоломка имеет решение только тогда, когда ss --- суперподстрока строки tt. Соответственно, последовательность r_1r\_1, r_2r\_2, …\ldots , r_kr\_k называется <<решением головоломки>>. Решение головоломки называется оптимальным, если среди всех решений количество элементов в решении, то есть число kk, минимально.

Дано NN головоломок, причем во всех головоломках строки tt одинаковы. Для каждой головоломки нужно определить, имеет ли она решение. Если головоломка имеет решение, необходимо найти любое оптимальное решение.

입력

В первой строке входного файла задана строка tt (1≤∣t∣≤1061 \le |t| \le 10^6).

Во второй строке задано число NN (1≤N≤1061 \le N \le 10^6) --- количество головоломок.

В следующих NN строках заданы головоломки в виде строки s_is\_i (1≤∣s_i∣≤1061 \le |s\_i| \le 10^6)

Сумма длин строк во всех головоломках не превышает 2⋅1062 \cdot 10^6.

Все строки в головоломках состоят только из первых 1010 строчных букв латинского алфавита.

출력

В выходной файл выведите NN строк --- ответ на каждую головоломку в отдельной строке.

Если головоломка не имеет решения, выведите <<NO>>, иначе выведите решение головоломки, разделяя элементы последовательности r_1r\_1, r_2r\_2, …\ldots , r_kr\_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