만드는 중입니다

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

아드리안

면접 대비

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

요약
소문자로 된 단어에서 글자를 재배열해 회문을 만들 수 있는 부분 문자열의 개수를 구합니다.
난이도

보통10점 중 5점

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

문제

어린 아드리안이 영국의 외딴 곳을 헤매다가 마법사를 만났다. 마법사는 단어가 적힌 종이를 건네며, 그 단어의 부분 문자열 중 글자를 재배열해서 팰린드롬을 만들 수 있는 것의 개수를 세라고 했다. 정확히는 1≤i≤j≤1 \le i \le j \le 단어 길이를 만족하는 인덱스 쌍 (i,j)(i, j) 중에서, ii번째부터 jj번째 글자까지(양 끝 포함)를 재배열해서 팰린드롬으로 만들 수 있는 쌍의 개수를 구하는 것이다. 팰린드롬은 앞에서 읽으나 뒤에서 읽으나 같은 단어로, 예를 들어 topot이 그렇다.

입력

첫 줄에 영어 소문자로만 이루어진 단어가 주어진다. 단어의 길이는 최대 1,000,000이다.

출력

조건을 만족하는 부분 문자열의 개수를 한 줄에 출력한다.

힌트

두 번째 예제에서 부분 문자열은 t, p, o, o, t, oo, poo(재배열하면 opo가 될 수 있다), oot(재배열하면 oto가 될 수 있다), tpoot(재배열하면 topot이 될 수 있다)이다.

예제3

  1. 예제 1

    입력
    carobnjak
    
    예상 출력
    9
    
  2. 예제 2

    입력
    tpoot
    
    예상 출력
    9
    
  3. 예제 3

    입력
    abbabaab
    
    예상 출력
    26