만드는 중입니다

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

문자열 - 그래프 매칭

면접 대비

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

요약
주어진 M개의 방향 간선 집합과 정확히 같은 인접 문자 쌍 집합을 갖는 T의 부분 문자열 개수를 셉니다.
난이도

보통10점 중 5점

유형
슬라이딩 윈도우, 문자열, 해시맵
정답자
아직 제출이 없습니다

문제

다음과 같은 방식으로 알파벳 소문자로 이루어진 문자열을 이용해 그래프를 만들 수 있다.

  1. 알파벳 소문자 a부터 z까지에 대응되는 정점을 만든다.
  2. 길이가 LL인 문자열 SS를 S1S2S3⋯SLS_1S_2S_3\cdots S_L로 나타낸다. L−1L-1 이하인 모든 양의 정수 ii에 대해 Si→Si+1S_i \to S_{i+1}인 간선을 그래프에 추가한다. 같은 간선이 여러 번 추가될 경우에는 한 번만 추가한다.

알파벳 소문자에 대응되는 정점들로 이루어진 그래프와 문자열 TT가 주어졌을 때, 위 변환 과정을 거쳐 주어진 그래프와 동일한 그래프가 만들어지는 TT의 부분 문자열의 개수를 구하시오.

부분 문자열은 문자열의 앞과 뒤에서 원하는 길이만큼 잘라내어 얻을 수 있는 길이 11 이상의 문자열이다. 예를 들어 abcde에서 cd와 abc는 부분 문자열이지만, bd는 앞뒤 어떤 길이로 잘라내도 얻을 수 없으므로 부분 문자열이 아니다.

입력

첫 번째 줄에 문자열의 길이를 나타내는 정수 NN이 주어진다. (2≤N≤2 000 0002 \le N \le 2\,000\,000)

두 번째 줄에 알파벳 소문자로만 이루어진 길이 NN의 문자열 TT가 주어진다.

세 번째 줄에 그래프의 간선 개수를 나타내는 정수 MM이 주어진다. (1≤M≤2621 \le M \le 26^2)

네 번째 줄부터 M+3M+3번째 줄까지 간선을 나타내는 알파벳 소문자 2개가 공백 없이 주어진다. xiyix_iy_i가 주어진 줄은 xi→yix_i \to y_i인 방향 간선을 뜻한다. xix_i와 yiy_i는 같은 문자일 수 있다. 같은 간선이 여러 번 주어지지 않는다.

출력

위 변환 과정을 거쳤을 때 주어진 그래프와 동일한 그래프가 만들어지는 TT의 부분 문자열 개수를 첫 번째 줄에 출력한다.

예제2

  1. 예제 1

    입력
    10
    raararaara
    3
    ra
    aa
    ar
    
    예상 출력
    25
    
  2. 예제 2

    입력
    10
    raararaara
    2
    ra
    ar
    
    예상 출력
    7