클-린드롬 부분 문자열

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

요약
각 K(1 이상 N 이하)마다 S의 부분 문자열 중 길이 K인 조각으로 나눴을 때 조각 배열이 팰린드롬이 되는 것의 개수를 센다.
난이도

어려움10점 중 8점

유형
문자열, 동적 계획법, 문자열 매칭, 해시맵
정답자
아직 제출이 없습니다

문제

팰린드롬 문자열들을 열심히 관찰하던 지훈이는 팰린드롬 문자열이 너무 더럽다고 생각하였고, 이름부터 훨씬 깨끗한 클-린드롬 문자열을 다음과 같이 정의하였다.

  • 어떤 문자열 TT를 길이가 KK인 연속된 문자열 조각들로 남김없이 나눌 수 있고, 이들 조각들을 순서대로 나열한 배열이 팰린드롬이면, TT를 KK-린드롬이라고 한다.

예를 들어, 문자열 abcdxycdab는 ab, cd, xy, cd, ab와 같이 길이가 22인 문자열 조각들로 나눌 수 있고, 이 조각들의 배열이 팰린드롬이 되므로 abcdxycdab는 22-린드롬이다.

이때 배열 A\[1⋯N]A\[1\cdots N]가 팰린드롬이라는 것은, 1≤i≤N1 \le i \le N인 모든 ii에 대해 A\[i]=A\[N+1−i]A\[i]=A\[N+1-i]를 만족하는 것을 의미한다.

문자열 SS가 주어질 때, 각 KK에 대해 SS의 비어 있지 않은 부분 문자열 중 KK-린드롬인 것의 개수를 구해보자!

입력

첫째 줄에 문자열 SS의 길이를 나타내는 정수 NN이 주어진다. (1≤N≤3,000)(1 \le N \le 3\\,000)

둘째 줄에 알파벳 소문자들로 이루어진 문자열 SS가 주어진다.

출력

1≤K≤N1 \le K \le N인 각 KK에 대해, KK번째 줄에 SS의 비어 있지 않은 부분 문자열 중 KK-린드롬인 것의 개수를 출력한다.

힌트

문자열 SS의 부분 문자열이란 SS의 연속된 일부를 의미한다.

예제2

  1. 예제 1

    입력
    10
    abcdxycdab
    
    예상 출력
    10
    11
    8
    7
    6
    5
    4
    3
    2
    1
    
  2. 예제 2

    입력
    4
    aaaa
    
    예상 출력
    10
    4
    2
    1