아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

베라와 연회

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

요약
원형으로 배치된 문자열 S에서 시계 방향이나 반시계 방향으로 읽은 연속 블록에 나타나는 서로 다른 부분 문자열의 개수를 센다.
난이도

어려움10점 중 8점

유형
문자열, 문자열 매칭, 정렬, 해시맵
정답자
아직 제출이 없습니다

문제

베라는 a부터 z까지 소문자 한 글자로 나타내는 레시피 26가지를 안다. 베라는 원형 식탁에 요리 NN 개를 놓아 연회를 준비한다. 베라는 게을러서 요리마다 레시피 26가지 중 하나를 독립적으로 균등하게 무작위로 고른다. 연회는 길이가 NN 인 문자열 SS 로 나타내고, SS 의 ii 번째 문자가 ii 번 요리의 레시피다. 2≤j≤N2 \le j \le N 인 jj 에 대해 jj 번 요리는 j−1j-1 번 요리의 시계 방향 옆자리에 있고, 1번 요리는 NN 번 요리의 시계 방향 옆자리에 있다.

표본은 식탁에 연속으로 놓인 요리의 레시피를 시계 방향이나 반시계 방향 중 한쪽으로 읽은 수열이다. 표본의 길이는 1 이상 NN 이하다. 두 표본은 길이가 같고 모든 위치의 레시피가 같을 때 같은 표본이다.

서로 다른 표본이 몇 개인지 구하여라.

입력

첫째 줄에 정수 NN 이 주어진다. (2≤N≤500002 \le N \le 50000)

둘째 줄에 소문자 NN 개로 이루어진 문자열 SS 가 주어진다.

출력

서로 다른 표본의 개수를 한 줄에 출력한다.

노트

N=3N = 3 이고 SS 가 aba 이면 서로 다른 표본은 a, b, aa, ab, ba, aba, aab, baa로 모두 8개다.

N=6N = 6 이고 SS 가 ondrej 이면 rejo 와 drejon 은 시계 방향 표본이고, nojer 와 dnojer 는 반시계 방향 표본이다.

예제3

  1. 예제 1

    입력
    3
    aba
    
    예상 출력
    8
    
  2. 예제 2

    입력
    6
    ondrej
    
    예상 출력
    66
    
  3. 예제 3

    입력
    8
    waterloo
    
    예상 출력
    118