CFCF2182D.Christmas Tree Decoration

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

nn 个人决定一起装饰圣诞树。他们有 n+1n+1 个装饰品盒子,编号从 00nn。最初,第 ii 个盒子里有 aia_i 个装饰品。

我们称一个大小为 nn 的排列 pp(长度为 nn 的数组,里面每个数字 11nn 各出现一次)是公平的,如果可以通过如下过程将所有装饰品都挂在树上:

  • p1p_1 个人可以从盒子 00 或盒子 p1p_1 中取一个装饰品,并挂在树上;
  • p2p_2 个人可以从盒子 00 或盒子 p2p_2 中取一个装饰品,并挂在树上;
  • 以此类推;
  • pnp_n 个人后,轮到第 p1p_1 个人,如此循环,直到所有装饰品都挂完。

在这个过程中,永远不应该出现这样一种情况:第 ii 个人需要挂装饰品,而盒子 00 和盒子 ii 都为空。如果无法避免这样的情况,则该排列不是公平排列。如果每轮每个人都能选择从哪个盒子取装饰品,始终不出现上述情况,则该排列是公平排列。

你的任务是计算有多少个公平排列。由于答案可能很大,请输出对 998244353998244353 取模的结果。

输入格式

第一行包含一个整数 tt1t50001 \le t \le 5000),表示测试用例数量。

每个测试用例的第一行包含一个整数 nn1n501 \le n \le 50)。

第二行包含 n+1n+1 个整数 a0,a1,,ana_0, a_1, \dots, a_n0ai1060 \le a_i \le 10^6)。

输出格式

对于每个测试用例,输出一行一个整数,表示公平排列的数量,对 998244353998244353 取模。

输入输出样例

  • 输入#1

    4
    3
    1 2 1 0
    3
    1 0 2 0
    1
    2 5
    4
    6 1 4 2 1

    输出#1

    2
    0
    1
    12

说明/提示

在第一个样例中,公平的排列是 [1,2,3][1, 2, 3][1,3,2][1, 3, 2]

让我们更仔细地看看排列 [1,3,2][1, 3, 2] 的装饰过程:

  • p1=1p_1=1 个人从盒子 11 拿一个装饰品;
  • p2=3p_2=3 个人从盒子 00 拿一个装饰品;
  • p3=2p_3=2 个人从盒子 22 拿一个装饰品;
  • p1=1p_1=1 个人再次从盒子 11 拿一个装饰品。

注意,如果第 p1=1p_1=1 个人第一步取的是盒子 00,那么第 p2=3p_2=3 个人接下来就无法进行(因为此时盒子 0033 都为空)。但由于可以避免这种情况,该排列依然是公平的。

首页