PPC와 CPP 2

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

요약
길이가 (K+1)N인 P와 C 문자열 중 P...PC 또는 CP...P 꼴 블록을 반복해 지워 빈 문자열로 만들 수 있는 문자열의 개수를 센다.
난이도

어려움10점 중 8점

유형
동적 계획법, 조합론, 문자열
정답자
아직 제출이 없습니다

문제

11 이상의 정수 NN과 22 이상의 정수 KK가 주어진다. P 또는 C로만 이루어진 길이가 (K+1)N(K+1)N인 문자열 a_1,a_2,⋯ ,a_(K+1)Na\_1, a\_2, \cdots, a\_{(K+1)N}에 다음 연산을 원하는 만큼 반복해서 빈 문자열로 만들 수 있다면 그 문자열을 PPC 문자열이라고 부른다.

  • 현재 문자열에서 연속된 K+1K+1개의 문자를 고른다. 고른 문자들이 P...PC 또는 CP...P를 이룬다면, 그 고른 문자들을 삭제한다. 그 후, 남은 문자들을 순서를 바꾸지 않고 다시 이어 붙인다.

예를 들어 K=2K=2일 때 CPPPCP는 PPC 문자열이다.

  • 현재 문자열에서 3,4,53,4,5번째 문자를 고르면 PPC를 이룬다. 고른 문자들을 삭제한 후 문자열은 CPP가 된다.
  • 현재 문자열에서 1,2,31,2,3번째 문자를 고르면 CPP를 이룬다. 고른 문자들을 삭제한 후 문자열은 빈 문자열이 된다.

NN과 KK가 주어질때, 길이가 (K+1)N(K+1)N인 PPC 문자열의 개수를 998244353998244353으로 나눈 나머지를 계산하시오.

입력

첫 번째 줄에 NN과 KK가 공백으로 구분되어 주어진다. (1≤N≤200000,2≤K≤401 \leq N \leq 200 000, 2 \leq K \leq 40)

출력

길이가 (K+1)N(K+1)N인 PPC 문자열의 개수를 998244353998244353으로 나눈 나머지를 출력하시오.

예제2

  1. 예제 1

    입력
    1 2
    
    예상 출력
    2
    
  2. 예제 2

    입력
    2 2
    
    예상 출력
    10