小L的彩球
题号:NC311980
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小 L 的科研毫无进展,于是他买了一堆彩球。
\hspace{15pt}小 L 有 n 个彩球,编号依次为 1,2,\dots,n,放在左右两个盒子里。左边的盒子里有 x 个,右边的盒子里有 n-x 个。每对相邻编号的彩球之间都有一条连线,若相邻的两个彩球被放入不同的盒子,则它们之间的连线会露在外面。
\hspace{15pt}已知有 t 条露在外面的线,小 L 想知道符合条件的彩球放法有多少种。由于答案可能很大,请将答案对 998\,244\,353 取模后输出。

输入描述:

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

\hspace{15pt}在一行上输入三个整数 n,x,t\left(1\le x \le n \le 10^6;\, 0\le t \le n-1\right),表示彩球数、左盒球数、露在外面的线数。

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行输出一个整数,表示符合条件的彩球放法对 998\,244\,353 取模的结果。
示例1

输入

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

输出

复制
1
2
2

说明

\hspace{15pt}对于第一组测试数据,我们需要左盒 1 个球,右盒 2 个球,且有 2 条线露在外面。其中一种符合条件的方案是“右左右”(即球 1 在右,球 2 在左,球 3 在右):
\hspace{23pt}\bullet\,12 在不同盒子,产生 1 条露出的线;
\hspace{23pt}\bullet\,23 在不同盒子,产生 1 条露出的线。
\hspace{15pt}总计 2 条线露在外面,符合条件。其他方案如“左右右”(1 条线露出)、“右右左”(1 条线露出)均不满足 t=2。故仅有 1 种符合条件的方案。

\hspace{15pt}对于第三组测试数据,我们需要左盒 2 个球,右盒 2 个球,且有 2 条线露在外面。其中两种符合条件的方案为“左右右左”和“右左左右”:
\hspace{23pt}\bullet\,“左右右左”:球 12 在不同盒子;球 23 在相同盒子;球 34 在不同盒子。共 2 条线露出。
\hspace{23pt}\bullet\,“右左左右”:球 12 在不同盒子;球 23 在相同盒子;球 34 在不同盒子。共 2 条线露出。