千变万化的排列
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

\hspace{15pt}你知道什么是 Xc 吗?
\hspace{15pt}不知道也没关系……等等,按照套路,你现在是不是猜我会说:“我们这里有一个关于反转排列的问题,你能够解决她吗?”。不不不,这太无聊了,我们来换一个:
\hspace{15pt}某一天你正在机房里打 [Ynoi2024] 新本格魔法少女 Xc,然后网站崩溃了,于是你只能做这道题目了:
\hspace{15pt}
\hspace{15pt}注:上面提到的这道题虽然与本题没有关系,但是也很好玩哦。
\hspace{15pt}小姬有一个长度为 n 的排列 P=\{1,2,\dots,n\} 以及两个正整数 ab
\hspace{15pt}她会对 P 进行下列两种操作:
\hspace{23pt}\bullet\,P 的区间 [1,a] 反转
\hspace{23pt}\bullet\,P 的区间 [n-b+1,n] 反转。
\hspace{15pt}现在,她想知道通过上述两种操作,能够得出多少种本质不同的排列 P。由于答案可能很大,请将答案对 998\,244\,353 取模后输出。

\hspace{15pt}定义两个排列 P 与 Q 是本质不同的,当且仅当存在至少一个 i,使得 P_i\neq Q_i

\hspace{15pt}反转就是将数组从右往左重新书写,例如 \{a_1,a_2,\dots,a_n\} 反转后得到 \{a_n,a_{n-1},\dots,a_1\}

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 10\right) 代表数据组数,每组测试数据描述如下: 

\hspace{15pt}在一行上输入三个整数 n,a,b \left(1\le n\le {\color{red}{\bf 10^{100}}};\ 1\le a,b\le n\right)

输出描述:

\hspace{15pt}对于每组测试数据,新起一行。输出一个整数,表示答案。由于答案可能很大,请将答案对 998\,244\,353 取模后输出。
示例1

输入

复制
2
3 1 2
4 3 2

输出

复制
2
6

说明

\hspace{15pt}对于第一组测试数据,一共有两个本质不同的排列:
\hspace{23pt}\bullet\,\{1,2,3\}
\hspace{23pt}\bullet\,\{1,3,2\}

\hspace{15pt}对于第二组测试数据,一共有六个本质不同的排列:
\hspace{23pt}\bullet\,\{3,2,4,1\}
\hspace{23pt}\bullet\,\{1,2,3,4\}
\hspace{23pt}\bullet\,\{1,2,4,3\}
\hspace{23pt}\bullet\,\{3,2,1,4\}
\hspace{23pt}\bullet\,\{4,2,1,3\}
\hspace{23pt}\bullet\,\{4,2,3,1\}
示例2

输入

复制
3
3 1 1
4 1 2
5 2 2

输出

复制
1
2
4
示例3

输入

复制
4
114514 114513 114512
2025011010000755127652 2025011010000755127602 2025011010000755127533
560700 560700 560700
560700 560700 3

输出

复制
836955541
179492684
2
8

说明

\hspace{15pt}请记得将答案模 998\,244\,353