주어진 패턴들에 하나를 더해 규칙이 주어진 동전 던지기 수열을 그대로 만들어 내도록 하는 문자열의 개수를 세고, 무한히 많으면 -1을 출력한다.
어려움8문자열동적 계획법문자열 매칭조합론아직 제출이 없습니다시간 제한2초메모리 제한512 MB동전 던지기 결과를 무작위처럼 보이게 만들지만 실제로는 전혀 무작위가 아닌 방법이 있다. 먼저 앞면 H와 뒷면 T로 이루어진 문자열 몇 개를 패턴으로 정한다. 새로운 동전 던지기 결과를 하나 만들 때마다 지금까지 나온 결과 전체를 앞에서부터 살펴보면서 각 패턴이 몇 번 등장하는지 센다. 그 횟수를 모두 더한 값이 짝수면 다음 결과는 T이고, 홀수면 H이다.
패턴이 다음 세 개라고 하자.
HTH
THH
T
이 세 패턴은 THHTHTHT...라는 결과를 만든다.
이제 패턴 하나가 집합에서 빠졌다고 하자. 남은 패턴과 결과 문자열이 주어질 때, 빠진 패턴의 후보가 몇 개인지 구하라. 후보는 H와 T로 이루어진 비어 있지 않은 문자열 중에서, 남은 패턴에 그 문자열을 다시 넣고 위 규칙을 적용했을 때 처음부터 주어진 결과 문자열과 똑같은 결과가 나오는 것을 말한다. 빠진 패턴은 주어진 패턴 중 어느 것과도 같을 수 없다.
입력은 테스트 케이스 하나로 이루어진다. 첫 줄에 패턴의 개수를 나타내는 정수 n이 주어진다 (1≤n≤100,000).
다음 n개의 줄에는 대문자 T와 H로만 이루어진 문자열이 한 줄에 하나씩 주어진다. 이 중 처음 n−1개는 패턴이고, 마지막 하나는 위 규칙으로 만들어진 결과 문자열이다.
n개 문자열의 길이 합은 106 이하이다. 모든 문자열은 서로 다르고, 빈 문자열은 없다.
빠진 패턴의 후보 개수를 한 줄에 출력한다. 후보가 무한히 많으면 -1을 출력한다.