만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

수열 생성하기

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

요약
수열 (1)에서 시작해 끝에 1 또는 m을 붙이거나 인접한 두 원소 사이에 그 사이 값을 넣는 연산을 n번 적용해 얻는 순서쌍의 개수를 998244353으로 나눈 나머지로 구한다.
난이도

어려움10점 중 8점

유형
조합론, 동적 계획법, 수학, 구현
정답자
아직 제출이 없습니다

문제

정수 수열의 수열 SS를 생각하자. 처음에 S0=(1)S_0 = (1)이다. 그다음 S1,S2,…,SnS_1, S_2, \ldots, S_n을 다음과 같이 만든다.

∣Si∣|S_i|를 수열 SiS_i의 길이, si,js_{i,j}를 SiS_i의 jj번째 원소라고 하자. 그러면 Si+1S_{i+1}의 길이는 ∣Si∣+1|S_i|+1이고, SiS_i에서 다음 두 연산 중 하나로 얻을 수 있다.

  • 새 수열의 ∣Si∣+1|S_i| + 1번째 원소로 11 또는 주어진 정수 mm을 쓴다.
  • 인덱스 jj (1≤j<∣Si∣1 \le j < |S_i|)를 골라 si,j<x<si,j+1s_{i,j} < x < s_{i,j + 1} 또는 si,j>x>si,j+1s_{i,j} > x > s_{i,j + 1}인 정수 xx를 선택하고, si,js_{i,j}와 si,j+1s_{i,j+1} 사이에 넣는다. 오른쪽 부분의 인덱스는 11씩 밀린다.

nn과 mm이 주어질 때, 서로 다른 수열의 순서쌍 S1…SnS_1 \ldots S_n의 개수를 구하자. 두 순서쌍은 11 이상 nn 이하의 어떤 ii에 대해서라도 SiS_i가 다르면 서로 다르다고 본다. 답이 클 수 있으므로 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

입력

입력은 한 줄로 이루어지며, 두 정수 nn과 mm이 주어진다. (1≤n≤30001 \le n \le 3000, 2≤m≤1082 \le m \le 10^8)

출력

서로 다른 수열의 순서쌍 SS의 개수를 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

힌트

첫 번째 예제에서 가능한 순서쌍은 다음과 같다.

  • S1=(1,3)S_1=(1,3) (첫 번째 연산), 그다음 S2=(1,2,3)S_2=(1,2,3) (두 번째 연산);
  • S1=(1,1)S_1=(1,1) (첫 번째 연산), 그다음 S2=(1,1,3)S_2=(1,1,3) (첫 번째 연산);
  • S1=(1,1)S_1=(1,1) (첫 번째 연산), 그다음 S2=(1,1,1)S_2=(1,1,1) (첫 번째 연산);
  • S1=(1,3)S_1=(1,3) (첫 번째 연산), 그다음 S2=(1,3,3)S_2=(1,3,3) (첫 번째 연산);
  • S1=(1,3)S_1=(1,3) (첫 번째 연산), 그다음 S2=(1,3,1)S_2=(1,3,1) (첫 번째 연산).

따라서 답은 55이다.

예제2

  1. 예제 1

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

    입력
    1024 52689658
    
    예상 출력
    654836147