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

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

쥐

시간 제한0.75초메모리 제한256 MB

요약
주기적으로 반복되는 무한 문자열 A와 문자열 집합 S가 주어질 때, A와 같은 무한 문자열을 만드는 B를 S의 문자열 최소 개수로 이어 붙이는 문제다.
난이도

어려움10점 중 8점

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

문제

주기적으로 반복되는 문자열 AA가 덮인 무한한 직선이 주어진다. 직선에는 문자열 AA가 무한히 이어 붙여져 있다. 직선에는 시작도 끝도 없다. 또 MM개의 문자열로 이루어진 집합 SS가 주어진다. SS의 문자열을 이어 붙여 새로운 문자열 BB를 만들어야 한다. BB는 다음 조건을 만족해야 한다.

  • 새로 만든 빈 무한 직선을 문자열 BB의 무한한 반복으로 덮었을 때, 그 직선은 AA로 덮은 직선과 같아야 한다.
  • 조건을 만족하는 BB나 BB를 만드는 방법이 여러 가지라면, SS에서 사용한 문자열의 개수가 최소가 되는 BB와 그 만드는 방법을 선택한다.

SS의 같은 문자열을 여러 번 사용할 수 있지만, 사용할 때마다 개수를 센다. 문자열은 아무 순서로나 이어 붙일 수 있지만, 문자열 안의 글자 순서는 바꿀 수 없다. 어떤 문자열 BB도 만들 수 없다면 −1-1을 출력한다.

입력

  • 첫째 줄에 문자열 AA가 주어진다. (1≤∣A∣≤5001\leq |A| \leq 500)
  • 둘째 줄에 정수 MM이 주어진다. MM은 집합 SS에 들어 있는 문자열의 개수이다. (1≤M≤1051 \leq M \leq 10^5)
  • 다음 MM개의 줄에 SS의 문자열이 하나씩 주어진다. ii번째 줄에는 문자열 LiL_i가 주어진다. (1≤∣Li∣≤∣A∣1 \leq |L_i| \leq |A|)
  • SS에 들어 있는 문자열 길이의 합은 10610^6보다 작거나 같다. (∑i=1M∣Li∣≤106\sum_{i=1}^{M} |L_i| \leq 10^6)

출력

문자열 BB를 만드는 데 필요한 SS의 문자열 개수의 최솟값을 정수 하나로 출력한다.

힌트

문자열 "b" 하나와 "a" 두 개를 사용해 BB = "aba"를 만들 수 있다.

  • ...baabaabaabaa...
  • .....abaabaabaaba...

예제1

  1. 예제 1

    입력
    baabaa
    3
    a
    b
    c
    
    예상 출력
    3