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

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

꺾은선

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

요약
최대 16종류의 각 문자에 오른쪽 또는 위 화살표를 고정 배정해 만들 수 있는 단조 계단 경로 아래 면적의 최댓값을 구한다.
난이도

어려움10점 중 8점

유형
그리디, 비트 연산, 구현, 수학
정답자
아직 제출이 없습니다

문제

Basia는 문자열 ss를 가지고 있고, 각 문자는 영어 알파벳 소문자 중 처음 16개 중 하나이다.

이 문자열의 각 문자는 오른쪽 또는 위쪽 화살표로 바뀌는데, 같은 문자는 반드시 같은 화살표로 바뀌어야 한다. 예를 들어 문자열 "banan"은 ↑↑→↑→\uparrow \uparrow \rightarrow \uparrow \rightarrow 또는 ↑↑↑↑↑\uparrow \uparrow \uparrow \uparrow \uparrow로 바뀔 수 있지만, →→→↑→\rightarrow \rightarrow \rightarrow \uparrow \rightarrow는 얻을 수 없다. 두 개의 문자 'a'를 서로 다른 화살표로 바꿔야 하기 때문이다.

Basia는 이렇게 얻은 화살표 열로 꺾은선을 그린다. 연필을 점 (0,0)(0, 0)에 놓고 시작해서, nn번 연필을 다음 화살표 방향으로 오른쪽 또는 위쪽으로 1만큼 움직인다.

이 그림의 결과는 꺾은선과 OX축 사이의 넓이로 정의한다. 엄밀히 말해 이 넓이는 y≥0y \geq 0이고, 꺾은선에 속하는 어떤 점 (x,y′)(x, y')가 y′≥yy' \geq y를 만족하는 점 (x,y)(x, y) 전체의 집합이다.

Basia의 그림 결과로 얻을 수 있는 최댓값은 얼마인가?

입력

표준 입력의 첫 번째 줄이자 유일한 줄에 문자열 ss (1≤∣s∣≤300 0001 \leq |s| \leq 300\,000)가 주어진다. ss는 영어 알파벳 소문자 'a'-'p' (16개 문자)로 이루어진다.

출력

문자를 주어진 규칙에 따라 화살표로 바꿨을 때 얻을 수 있는 그림 결과의 최댓값을 정수 하나로 출력한다.

힌트

문자열 "banan"은 ↑↑→↑→\uparrow \uparrow \rightarrow \uparrow \rightarrow로 바꾸는 것이 좋다. 이때 꺾은선 아래의 넓이는 55이다:

문자열 "abcdefghijklmnopaaaa"에는 넓이가 90인 최적해가 두 가지 있다:

예제2

  1. 예제 1

    입력
    banan
    
    예상 출력
    5
    
  2. 예제 2

    입력
    abcdefghijklmnopaaaa
    
    예상 출력
    90