#5525. sort

sort

题面 样例

题目描述

大家都知道冒泡排序,但是可能有人不知道双向冒泡排序。我们给出它的一个伪代码:

void sort(){
    for i : 1->(n-1) 
        if p[i] > p[i+1]
            swap p[i],p[i+1]
    for i : n->2
        if p[i-1] > p[i]
            swap p[i-1],p[i]
}

容易看出,对一个排列 pp 调用 O(n)O(n)sort() 后,它一定会变得升序。现在给出 n,kn,k,请你回答有多少个长度为 nn 的排列 pp,满足调用了 kksort() 方法后,可以将其排成升序。答案模 998244353998244353 输出。

输入格式

sort.in 中读入。

一行两个正整数 n,kn,k

输出格式

输出到 sort.out 中。

输出答案对 998244353998244353 取模的结果。

样例输入 1

5 1

样例输出 1

68

数据范围

对于所有数据,保证 1n,k1041\le n,k\le 10^4

对于测试点 121\sim 2,满足 n10n\le 10

对于测试点 353\sim 5,满足 n20n\le 20

对于测试点 676\sim 7,满足 k=1k=1

对于测试点 898\sim 9,满足 n,k50n,k\le 50

对于测试点 1010,无特殊约束。