하이퍼드롬

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

요약
각 문자의 개수 홀짝만 따질 때 홀수 개인 문자가 많아야 하나인 부분 문자열의 개수를 센다.
난이도

보통10점 중 7점

유형
비트 연산, 누적 합, 해시맵, 문자열
정답자
아직 제출이 없습니다

문제

어떤 문자열의 문자 위치를 적절히 재배열하여 팰린드롬으로 만들 수 있으면, 그 문자열을 하이퍼드롬이라고 한다.

문자열 SS가 주어질 때, SS의 부분 문자열 중 하이퍼드롬인 것의 개수를 구하여라.

SS의 부분 문자열이란 ii번째 문자부터 jj번째 문자까지를 이어 붙인 문자열을 말한다 (1≤i≤j≤n1 \le i \le j \le n). 부분 문자열의 내용이 같더라도 (i,j)(i, j)가 다르면 서로 다른 부분 문자열로 센다.

문자열 x1x2…xlx_1 x_2 \dots x_l이 모든 위치 ii에서 xi=xl−i+1x_i = x_{l-i+1}을 만족하면 팰린드롬이라고 한다.

SS는 알파벳 대문자와 소문자('a'–'z', 'A'–'Z')로 이루어지며, 대문자와 소문자는 서로 다른 문자로 취급한다(예를 들어 'A'와 'a'는 다른 문자다).

입력

첫째 줄에 문자열 SS의 길이 nn이 주어진다. (1≤n≤3⋅1051 \le n \le 3 \cdot 10^5)

둘째 줄에 문자열 SS가 주어진다.

출력

SS의 부분 문자열 중 하이퍼드롬인 것의 개수를 출력한다.

힌트

부분 문자열은 그 자체가 팰린드롬이 아니어도 하이퍼드롬일 수 있다. 예를 들어 'aAA'는 팰린드롬이 아니지만, 재배열하면 팰린드롬 'AaA'가 되므로 하이퍼드롬이다.

예제3

  1. 예제 1

    입력
    3
    aaa
    
    예상 출력
    6
    
  2. 예제 2

    입력
    7
    abadaba
    
    예상 출력
    12
    
  3. 예제 3

    입력
    3
    aAA
    
    예상 출력
    5