QueryreuQ

문자열에 문자를 덧붙이거나 끝에서 지우는 연산을 처리하면서, 매 연산 직후 문자열이 가진 회문 부분 문자열의 개수를 출력한다.

보통5문자열동적 계획법구현투 포인터면접 대비아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

어떤 문자열을 뒤집었을 때 원래 문자열과 같으면 그 문자열을 팰린드롬이라고 한다. 예를 들어 "a", "aa", "appa", "queryreuq"는 모두 팰린드롬이다.

비어 있는 문자열 SS에서 시작해 두 가지 연산을 처리한다.

  1. SS의 맨 뒤에 알파벳 소문자를 하나 붙인다.
  2. SS의 맨 뒤 문자를 하나 지운다.

연산을 하나 처리할 때마다 그 시점의 SS에 들어 있는 팰린드롬 부분문자열의 개수를 세어야 한다. 1ijS1 \le i \le j \le |S|인 정수 ii, jj에 대해 S[i,j]S[i, j]SSii번째 문자부터 jj번째 문자까지로 이루어진 부분문자열이라고 하자. S[i,j]S[i, j]가 팰린드롬인 정수쌍 (i,j)(i, j)의 개수를 세어 출력한다.

입력

입력은 두 줄이다.

첫째 줄에 쿼리의 개수 QQ가 주어진다.

둘째 줄에 쿼리가 길이 QQ인 문자열 하나로 주어진다. 이 문자열의 ii번째 문자 KiK_iii번째 쿼리를 나타낸다.

KiK_i는 '-'이거나 영어 소문자('a', 'b', ..., 'z') 중 하나다. 따옴표는 입력에 포함되지 않는다.

KiK_i가 '-'이면 SS의 맨 뒤 문자를 지우고, 영어 소문자면 SS의 맨 뒤에 KiK_i를 붙인다.

각 쿼리를 처리한 뒤 SS의 길이는 항상 1 이상임이 보장된다.

출력

한 줄에 QQ개의 정수를 공백 하나로 구분해 출력한다. ii번째 정수는 ii번째 쿼리를 처리한 뒤의 답이다.

제한

  • 1Q10,0001 \le Q \le 10{,}000