사진 이어 붙이기

면접 대비

시간 제한0.3초메모리 제한512 MB

요약
도시 이름 C가 주어질 때, 각 친구 이름을 C의 부분 문자열들을 이어 붙여 만들 수 있는 최소 조각 수를 구하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 6점

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

문제

엔조는 최근 몬테비데오라는 도시에 여행을 갔고, 그곳에서 도시 이름이 적힌 큰 간판을 보았다. 그는 간판의 사진을 찍어 콜라주를 만들어 친구 데모니오에게 보내기로 했다. 엔조는 간판의 일부분을 찍은 사진을 하나 이상 이어 붙여 친구의 이름을 만들려고 한다. 예를 들어 문자열 “MONTEVIDEO”에서 “DE-MON-I-O”를 이어 붙여 친구의 이름을 만들 수 있으며, 이때 네 장의 사진이 필요하다. 더 적은 수의 사진으로는 만들 수 없다는 것은 쉽게 보일 수 있다.

도시의 이름과 친구들의 이름 목록이 주어진다. 각 친구의 이름을 만들기 위해 필요한 사진의 최소 개수를 구하라. 이름을 만들 때 사진은 회전하거나 반사하거나 어떤 방식으로든 변형할 수 없다.

입력

첫째 줄에는 도시의 이름을 나타내는 문자열 CC가 주어진다. 둘째 줄에는 친구의 수를 나타내는 양의 정수 NN이 주어진다. 다음 NN개의 줄에는 각각 친구의 이름을 나타내는 문자열이 주어진다. 모든 문자열은 비어 있지 않으며 대문자로만 이루어져 있다. 모든 문자열의 길이의 합은 2×1052 \times 10^5 이하이다.

출력

입력에 주어진 각 이름을 만들기 위해 필요한 사진의 최소 개수를 한 줄에 하나씩 NN줄에 걸쳐 출력한다. 이름을 만들 수 없으면 “-1”을 출력한다.

예제2

  1. 예제 1

    입력
    MONTEVIDEO
    4
    DEMONIO
    MONTE
    EDIT
    WON
    
    예상 출력
    4
    1
    4
    -1
    
  2. 예제 2

    입력
    SANTIAGO
    3
    TITA
    SANTIAGO
    NAS
    
    예상 출력
    3
    1
    3