# 冒泡 ## 题目描述 对于一个 $1\sim n$ 的排列 $a$ 和一个数 $m$,定义 $f(a,m)$ 为恰好经过 $m$ 轮冒泡排序后变为 $a$ 的不同排列数量。 一轮冒泡排序的过程如下:从小到大依次考虑每个 $i \in [1,n)$,如果 $a[i]>a[i+1]$,那么就交换 $a[i]$ 和 $a[i+1]$。 给定 $n,m$ 和一个长度为 $n$ 的序列 $lim$。一个排列 $a$ 合法当且仅当 $\forall i$,如果 $lim[i]\ne 0$,那么 $a[i] = lim[i]$。 你需要求出所有合法的 $a$ 的 $f(a,m)$ 之和。答案对 $998244353$ 取模。 ## 输入格式 第一行,共两个数,表示 $n,m$。 第二行,共 $n$ 个数,表示 $lim[1...n]$。 ## 输出格式 共一行,一个数,表示答案。 ## 样例 #1 ### 样例输入 #1 ``` 6 2 0 0 0 0 0 0 ``` ### 样例输出 #1 ``` 720 ``` ## 样例 #2 ### 样例输入 #2 ``` 6 0 6 0 1 4 0 0 ``` ### 样例输出 #2 ``` 6 ``` ## 样例 #3 ### 样例输入 #3 ``` 见下发样例 ``` ### 样例输出 #3 ``` ``` ## 提示 对于 100% 的数据,$1\le n\le 5000, 0\le m\le n, 0\le lim[i]\le n$,保证 $lim[i]$ 互不相同。 子任务1(10pts):$n\le 8$ 子任务2(40pts):所有 $lim[i]\ne 0$ 子任务3(20pts):$n\le 100$ 子任务4(30pts):无特殊限制