#CF1909I. 短排列问题

短排列问题

I. 短排列问题

每个测试的时间限制:77
每个测试的内存限制:10241024 MB


给定一个整数 nn

对于每个满足 3mn+13 \le m \le n+10kn10 \le k \le n-1(m,k)(m,k),统计 [1,2,,n][1,2,\ldots,n] 的所有排列中,使得 pi+pi+1mp_i + p_{i+1} \ge m 恰好有 kk 个下标 ii 的排列个数,结果对 998244353998244353 取模。


输入

输入只有一行,包含两个整数 n,xn, x2n40002 \le n \le 40001x<10000000071 \le x < 1000000007)。


输出

am,ka_{m,k} 为对 (m,k)(m,k) 的答案(已对 998244353998244353 取模)。
定义

$$S = \sum_{m=3}^{n+1} \sum_{k=0}^{n-1} a_{m,k} \, x^{mn+k}. $$

输出一行一个整数:SS10000000071000000007 取模的结果。

注意,使用两个不同的模数是故意的。我们需要你先计算所有 am,ka_{m,k}998244353998244353 取模的结果,然后将它们视为 [0,998244352][0,998244352] 范围内的整数,再对 10000000071000000007 取模得到哈希值。


示例

输入

3 2

输出

77824

在第一个测试用例中,所有 (m,k)(m,k) 的答案如下表所示:

mm \ kk k=0k=0 k=1k=1 k=2k=2
m=3m=3 00 00 66
m=4m=4 44 22
  • (m,k)=(3,2)(m,k)=(3,2) 的答案为 66,因为对于长度为 33 的每个排列,ai+ai+13a_i+a_{i+1}\ge 3 恰好发生 22 次。
  • (m,k)=(4,2)(m,k)=(4,2) 的答案为 22。事实上,有 22 个长度为 33 的排列使得 ai+ai+14a_i+a_{i+1}\ge 4 恰好发生 22 次:[1,3,2][1,3,2][2,3,1][2,3,1]

因此,需要输出的值为

$$2^9\cdot0 + 2^{10}\cdot0 + 2^{11}\cdot6 + 2^{12}\cdot0 + 2^{13}\cdot4 + 2^{14}\cdot2 \equiv 77824 \pmod{1000000007}. $$

输入

4 1000000000

输出

30984329

在第二个测试用例中,所有 (m,k)(m,k) 的答案如下表所示:

mm \ kk k=0k=0 k=1k=1 k=2k=2 k=3k=3
m=3m=3 00 00 00 2424
m=4m=4 1212
m=5m=5 44 1616 44
  • (m,k)=(5,1)(m,k)=(5,1) 的答案为 44。事实上,有 44 个长度为 44 的排列使得 ai+ai+15a_i+a_{i+1}\ge 5 恰好发生 11 次:[2,1,3,4][2,1,3,4][3,1,2,4][3,1,2,4][4,2,1,3][4,2,1,3][4,3,1,2][4,3,1,2]

输入

8 327869541

输出

85039220

在第三个测试用例中,所有 (m,k)(m,k) 的答案如下表所示:

mm \ kk k=0k=0 k=1k=1 k=2k=2 k=3k=3 k=4k=4 k=5k=5 k=6k=6 k=7k=7
m=3m=3 00 00 00 00 00 00 00 4032040320
m=4m=4 1008010080 3024030240
m=5m=5 14401440 1728017280 2160021600
m=6m=6 480480 86408640 2160021600 96009600
m=7m=7 9696 34563456 1641616416 1689616896 34563456
m=8m=8 4848 21602160 1296012960 1824018240 64806480 432432
m=9m=9 1616 11521152 96489648 1868818688 96489648 11521152 1616

输入

4000 1149333

输出

584870166