생명공학 연구소

소문자 a부터 z에 1부터 26까지의 무게를 부여했을 때, 모든 비어 있지 않은 연속 부분 문자열의 무게 중 서로 다른 값의 개수를 센다.

보통7누적 합투 포인터이분 탐색배열면접 대비아직 제출이 없습니다시간 제한7초메모리 제한1024 MB

문제

가중 문자열은 알파벳 Σ\Sigma와 각 문자에 가중치를 정해 주는 함수 ff 위에서 정의한다. 문자열 ss의 가중치는 ss를 이루는 모든 문자의 가중치를 더한 값이다.

생물정보학의 여러 문제는 가중 문자열에 대한 문제로 형식화된다. 단백질 질량 분석이 그런 예다. 아미노산 하나를 서로 다른 문자 하나로 나타내면, 단백질은 그 단백질을 이루는 아미노산에 대응하는 문자열이 된다.

단백질 질량 분석을 쓰는 곳 가운데 하나가 데이터베이스 검색이다. 단백질을 나타내는 문자열을 여러 부분 문자열로 나누고, 각 부분 문자열의 질량을 구한 다음, 그 질량 목록을 단백질 데이터베이스와 대조한다. 문자열이 길어지면 가능한 부분 문자열이 매우 많아지므로, 몇 개를 고르느냐가 결과의 품질을 좌우한다.

생명공학 연구소에서 인턴을 시작한 카를로스는 첫날 과제를 하나 받았다. 문자열 ss가 주어질 때, 연속한 문자로 이루어진 비어 있지 않은 모든 부분 문자열의 가중치를 구하고, 그 값 중 서로 다른 것이 몇 개인지 세는 것이다.

ss는 알파벳 소문자로만 이루어지고, 소문자 26개의 가중치는 모두 다르다. a는 1, b는 2, 같은 방식으로 z는 26이다. 가장 긴 입력도 여유 있게 처리하는 풀이를 작성하라.

입력

첫째 줄에 알파벳 소문자로만 이루어진 문자열 ss가 주어진다. 길이는 1s1051 \le |s| \le 10^5이다.

출력

첫째 줄에 ss에서 연속한 문자로 이루어진 비어 있지 않은 부분 문자열의 가중치 중 서로 다른 값의 개수를 정수 하나로 출력한다.