题目内容
给定一个长度为 n 的二进制数组 a(所有元素为 0 或 1)。你想将这个数组排序,但不幸的是,你的算法老师忘记教你排序算法。你重复执行以下操作,直到数组变为非降序(即所有 0 在前,所有 1 在后):
- 随机选择两个下标 i 和 j,满足 i<j。所有满足 1≤i<j≤n 的下标对 (i,j) 被选中的概率相等。
- 如果 ai>aj,则交换 ai 和 aj。
求在数组变为有序之前,你所执行的操作次数的期望值。
可以证明答案可以表示为既约分数 qp,其中 p 和 q 是整数且 q≡0(mod998244353)。输出整数 p⋅q−1mod998244353,即输出满足 0≤x<998244353 且 x⋅q≡p(mod998244353) 的整数 x。
输入
每个测试包含多个测试用例。第一行包含一个整数 t(1≤t≤105)——测试用例的数量。接下来每个测试用例的描述如下:
- 第一行包含一个整数 n(1≤n≤2×105)——数组的长度。
- 第二行包含 n 个整数 a1,a2,…,an(ai∈{0,1})——数组元素。
保证所有测试用例的 n 之和不超过 2×105。
输出
对于每个测试用例,输出一个整数——答案模 998244353。
样例
输入
3
3
0 1 0
5
0 0 1 1 1
6
1 1 1 0 0 1
输出
3
0
249561107
注意
在第一个测试用例中,如果选择下标对 (2,3),则交换它们,数组变为有序。否则,如果选择 (1,2) 或 (1,3),什么也不会发生。因此,一次操作后数组变为有序的概率为 31,两次操作后变为有序的概率为 32⋅31,依此类推。期望操作次数为 $\sum_{i=1}^{\infty} \left(\frac{2}{3}\right)^{i-1} \cdot \frac{1}{3} \cdot i = 3$。
第二个测试用例中,数组已经有序,所以期望操作次数为 0。
第三个测试用例中,期望操作次数等于 475,所以答案为 75⋅4−1≡249561107(mod998244353)。