쥐
시간 제한0.75초메모리 제한256 MB
주기적으로 반복되는 무한 문자열 A와 문자열 집합 S가 주어질 때, A와 같은 무한 문자열을 만드는 B를 S의 문자열 최소 개수로 이어 붙이는 문제다.
문제
주기적으로 반복되는 문자열 가 덮인 무한한 직선이 주어진다. 직선에는 문자열 가 무한히 이어 붙여져 있다. 직선에는 시작도 끝도 없다. 또 개의 문자열로 이루어진 집합 가 주어진다. 의 문자열을 이어 붙여 새로운 문자열 를 만들어야 한다. 는 다음 조건을 만족해야 한다.
- 새로 만든 빈 무한 직선을 문자열 의 무한한 반복으로 덮었을 때, 그 직선은 로 덮은 직선과 같아야 한다.
- 조건을 만족하는 나 를 만드는 방법이 여러 가지라면, 에서 사용한 문자열의 개수가 최소가 되는 와 그 만드는 방법을 선택한다.
의 같은 문자열을 여러 번 사용할 수 있지만, 사용할 때마다 개수를 센다. 문자열은 아무 순서로나 이어 붙일 수 있지만, 문자열 안의 글자 순서는 바꿀 수 없다. 어떤 문자열 도 만들 수 없다면 을 출력한다.
입력
- 첫째 줄에 문자열 가 주어진다. ()
- 둘째 줄에 정수 이 주어진다. 은 집합 에 들어 있는 문자열의 개수이다. ()
- 다음 개의 줄에 의 문자열이 하나씩 주어진다. 번째 줄에는 문자열 가 주어진다. ()
- 에 들어 있는 문자열 길이의 합은 보다 작거나 같다. ()
출력
문자열 를 만드는 데 필요한 의 문자열 개수의 최솟값을 정수 하나로 출력한다.
힌트
문자열 "b" 하나와 "a" 두 개를 사용해 = "aba"를 만들 수 있다.
- ...baabaabaabaa...
- .....abaabaabaaba...