문자열 - 그래프 매칭
시간 제한2초메모리 제한1024 MB
26개 알파벳 정점 위의 방향 그래프와 문자열 T가 주어졌을 때, 인접한 문자쌍들이 만드는 그래프가 주어진 그래프와 같은 T의 부분 문자열 개수를 구한다.
문제
다음과 같은 방식으로 알파벳 소문자로 이루어진 문자열을 이용해 그래프를 만들 수 있다.
- 알파벳 소문자
a부터z까지에 대응되는 정점을 만든다. - 길이가 인 문자열 를 로 나타냈을 때, 이하인 모든 양의 정수 에 대해 인 간선을 그래프에 추가한다. 이때 같은 간선이 여러 개일 경우 한 개만 추가한다.
알파벳 소문자에 대응되는 정점들로 이루어진 그래프와 문자열 가 주어졌을 때, 위 변환 과정을 통해 주어진 그래프와 동일한 그래프가 만들어지는 의 부분 문자열의 개수를 구하시오.
여기서 부분 문자열이란, 문자열의 앞뒤에서 원하는 길이만큼 잘라서 얻을 수 있는 길이 이상의 문자열을 의미한다. 예를 들어 abcde라는 문자열이 있을 때, cd나 abc는 부분 문자열이지만, bd는 문자열의 앞 뒤에서 어떤 길이로 잘라내도 얻어낼 수 없으므로 부분 문자열이 아니다.
입력
첫 번째 줄에 문자열의 길이를 나타내는 정수 이 주어진다.
두 번째 줄에 문자열 가 주어진다. 는 알파벳 소문자로만 이루어진 길이 짜리 문자열이다.
세 번째 줄에 그래프의 간선 개수를 나타내는 정수 이 주어진다.
네 번째 줄부터 번째 줄까지 그래프의 간선을 나타내는 알파벳 소문자 개가 공백 없이 주어진다.
인 에 대해 번째 줄에 가 입력으로 주어졌다면 이는 인 간선을 의미한다. 와 는 같은 문자일 수 있으며, 같은 간선이 여러 번 주어지지 않는다. 주어지는 간선은 방향이 있는 간선임에 유의한다.
출력
첫 번째 줄에 지문에서 언급된 그래프 변환 과정을 거쳤을 때 동일한 그래프가 만들어지는 문자열 의 부분 문자열의 개수를 출력한다.