루시드 스트링
시간 제한0.5초메모리 제한512 MB
길이 n인 문자열 S에서 같은 길이의 k개 조각으로 나눌 때 조각들이 모두 서로 다른 부분 문자열의 개수를 구합니다.
문제
영어 소문자 26개로 이루어진 문자열을 생각하자. 문자열의 길이가 두 양의 정수 (≥ 2)와 의 곱으로 표현되면, 그 문자열을 길이가 로 같은 부분 문자열 개로 나눌 수 있다. 나눈 개의 부분 문자열이 모두 서로 다르면, 그 문자열을 "-Lucid-String" (줄여서 "-LS")이라고 한다. 부분 문자열은 문자열 안에서 연속된 문자들의 묶음이다.
예를 들어 길이가 6인 ababca는 의 세 경우를 확인해야 한다. 일 때 aba와 bca로 나뉘고 서로 다르므로 2-LS이다. 일 때는 길이 2인 부분 문자열 3개로 나뉘지만 ab가 두 번 나오므로 3-LS가 아니다. 일 때는 길이 1인 부분 문자열 6개로 나뉘지만 a와 b가 각각 두 번 나오므로 6-LS가 아니다.
길이가 인 문자열 와 정수 가 주어졌을 때, 의 부분 문자열 중 -LS인 것의 개수를 구하라. 내용이 같더라도 에서 시작 위치가 다르면 각각 따로 센다.
예를 들어 일 때 ababca의 부분 문자열 ab, ba, ab, bc, ca는 모두 서로 다른 길이 1의 부분 문자열 2개로 나뉘므로 2-LS이다. 부분 문자열 babc와 abca도 길이 2인 서로 다른 부분 문자열 2개로 나뉘므로 2-LS이다. 문자열 전체도 2-LS이므로, ababca에는 2-LS인 부분 문자열이 8개 있다.
입력
첫 줄에 두 정수 (3 ≤ ≤ 40,000)과 (2 ≤ ≤ 40,000)가 주어진다. 은 문자열의 길이이고, 는 각 -LS를 이루는 같은 길이 부분 문자열의 개수이다. ≤ 이라고 가정해도 된다. 둘째 줄에는 길이가 인 문자열이 주어진다.
출력
입력된 문자열의 부분 문자열 중 -LS인 것의 개수를 한 줄에 출력한다.