#ATagc054e. [AGC054E] ZigZag Break

[AGC054E] ZigZag Break

题目描述

给定整数 N,AN,A。请计算满足以下条件的 (1,2,,N)(1,2,\cdots,N) 的排列 P=(P1,P2,,PN)P=(P_1,P_2,\cdots,P_N) 的个数,并将结果对 998244353998244353 取模。

  • P1=AP_1=A
  • 通过重复以下操作,可以将 PP 的元素个数变为 22
    • 选择 33连续的元素 x,y,zx,y,z。此时,要求 y<min(x,z)y<\min(x,z)y>max(x,z)y>\max(x,z) 成立。然后,将 yyPP 中删除。

对于每个输入文件中的 TT 个测试用例,请输出答案。

输入格式

输入以以下格式从标准输入给出。

TT
case1case_1
case2case_2
\vdots
caseTcase_T

每个测试用例的格式如下:

N AN\ A

输出格式

对于每个测试用例,输出一行答案。

样例 1

输入

8
3 1
3 2
3 3
4 1
4 2
4 3
4 4
200000 10000

输出

1
2
1
3
5
5
3
621235018

说明/提示

限制条件

  • 1T5×1051\leq T\leq 5\times 10^5
  • 3N1063\leq N\leq 10^6
  • 1AN1\leq A\leq N
  • 输入的所有值均为整数

样例解释 1

例如,当 N=4,A=2N=4,A=2 时,P=(2,1,4,3)P=(2,1,4,3) 满足条件。以下是操作的一个例子:

  • 选择 (x,y,z)=(2,1,4)(x,y,z)=(2,1,4),删除 11PP 变为 (2,4,3)(2,4,3)
  • 选择 (x,y,z)=(2,4,3)(x,y,z)=(2,4,3),删除 44PP 变为 (2,3)(2,3)

由 ChatGPT 4.1 翻译