만드는 중입니다

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

카드

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

요약
카드 복사를 허용할 때 단어 t를 부분 문자열로 포함하는 카드 행을 만들고, 사용한 카드 수가 최소가 되도록 구하여 그 문자열을 출력합니다.
난이도

보통10점 중 7점

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

문제

보바는 아주 조용한 소년이라서 조용히 앉아 무언가를 하는 것을 좋아한다. 최근 부모님이 라틴 알파벳으로 된 단어가 하나씩 적힌 카드 세트를 선물했다. 카드의 단어들은 어떤 단어도 다른 단어의 접미사가 되지 않도록 골라져 있다.

부모님이 단어 tt를 말하면, 보바는 카드 여러 장을 한 줄로 늘어놓아 tt를 부분 문자열로 포함하는 긴 문자열 ss를 만든다. 카드끼리 겹쳐 놓을 수 없다. 보바는 복사기를 사용해 가진 카드를 원하는 만큼 복사할 수 있다.

보바가 이 과제를 완료하기 위해 사용해야 하는 카드의 최소 개수를 구하라.

입력

첫 줄에 단어 tt가 주어진다. 길이는 10510^5를 넘지 않는다.

둘째 줄에 보바가 가진 서로 다른 카드의 개수 nn (1≤n≤1051 \le n \le 10^5)이 주어진다. 이어서 nn개의 줄에 카드마다 적힌 단어가 한 줄씩 주어진다. 모든 카드 단어의 길이 합은 10510^5를 넘지 않는다.

어떤 카드의 단어도 다른 카드의 단어의 접미사가 되지 않는다. 단어 $t`와 카드의 단어는 모두 소문자 라틴 알파벳으로만 이루어진다.

출력

첫 줄에 사용한 카드의 개수 kk를 출력한다. 복사한 카드도 포함한다.

둘째 줄에는 kk장의 카드를 한 줄로 배치해 만든 단어 ss를 출력한다. ss는 tt를 부분 문자열로 포함해야 한다. 답이 여러 개이면 그중 아무거나 출력한다.

카드를 이런 방식으로 배치할 수 없으면 No solution을 출력한다.

예제3

  1. 예제 1

    입력
    abacaba
    5
    zyx
    a
    aba
    b
    c
    
    예상 출력
    3
    abacaba
    
  2. 예제 2

    입력
    torneo
    3
    qwertorn
    neco
    eopass
    
    예상 출력
    2
    qwertorneopass
    
  3. 예제 3

    입력
    torneo
    3
    qwerty
    neco
    eopass
    
    예상 출력
    No solution