만드는 중입니다

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

이중 회문

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

요약
길이가 같은 두 팰린드롬을 이어 붙인 부분 문자열의 개수를 구합니다. n은 최대 500,000입니다.
난이도

어려움10점 중 9점

유형
문자열, 문자열 매칭, 동적 계획법
정답자
아직 제출이 없습니다

문제

바냐는 회문을 만드는 공장에서 일한다. 공장에는 길이가 nn인 소문자 영어 알파벳 문자열 ss로 된 가공품이 있고, 바냐는 여기서 임의의 부분 문자열을 잘라 판매할 수 있다. 회문은 앞에서 읽으나 뒤에서 읽으나 같은 문자열이다.

많은 사람이 평범한 회문에 질렸기 때문에, 바냐는 대신 이중 회문을 만들기로 했다. 이중 회문은 길이가 같은 회문 두 개를 이어 붙인 문자열이다. 예를 들어 aabb와 aaaa는 이중 회문이지만, abba와 aaaabb는 이중 회문이 아니다.

바냐는 ss에서 이중 회문을 잘라내는 방법이 몇 가지인지 궁금해한다. 즉, 부분 문자열 slsl+1…srs_l s_{l+1} \ldots s_r이 이중 회문이 되는 쌍 (l,r)(l, r)의 개수를 구하라.

입력

첫 줄에 문자열의 길이 nn (1≤n≤500 0001 \leq n \leq 500\,000)이 주어진다. 둘째 줄에는 소문자 영어 알파벳으로 이루어진 문자열 ss가 주어진다.

출력

이중 회문인 부분 문자열의 개수를 한 줄에 출력한다.

힌트

첫 번째 예제에서 길이 2인 이중 회문은 ab, ba, ac, ca, ac로 5개이다. 문자열 전체인 abacac도 이중 회문이다.

예제2

  1. 예제 1

    입력
    6
    abacac
    
    예상 출력
    6
    
  2. 예제 2

    입력
    5
    aaaaa
    
    예상 출력
    6