题目描述
小 L 有一个有向图,图中的顶点可以分为 k 层,第 i 层有 ni 个顶点,第 1 层与第 k 层顶点数相同,即 n1=nk,且对于第 j(2≤j≤k−1)层,n1≤nj≤2n1。对于第 j(1≤j<k)层的顶点,以它们为起点的边只会连向第 j+1 层的顶点。没有边连向第 1 层的顶点,第 k 层的顶点不会向其他顶点连边。
现在小 L 要从这个图中选出 n1 条路径,每条路径以第 1 层顶点为起点,第 k 层顶点为终点,并要求图中的每个顶点至多出现在一条路径中。更具体地,把每一层顶点按照 1,2,…,n1 进行编号,则每条路径可以写为一个 k 元组 (p1,p2,…,pk),表示这条路径依次经过第 j 层的 pj(1≤pj≤nj)号顶点,并且第 j(1≤j<k)层的 pj 号顶点有一条边连向第 j+1 层的第 pj+1 号顶点。
小 L 把这些路径画在了纸上,发现它们会产生若干个交点。对于两条路径 P,Q,分别设它们在第 j 层与第 j+1 层之间的连边为 (Pj,Pj+1) 与 (Qj,Qj+1),若,
(Pj−Qj)×(Pj+1−Qj+1)<0
则称它们在第 j 层后产生了一个交点。两条路径的交点数为它们在第 1,2,…,k−1 层后产生的交点总数。对于整个路径方案,它的交点数为两两不同路径间交点数之和。例如下图是一个 3 条路径,共 3 个交点的例子,其中红色点是交点。
小 L 现在想知道有偶数个交点的路径方案数比有奇数个交点的路径方案数多多少个。两个路径方案被视为相同的,当且仅当它们的 n1 条路径按第一层起点编号顺序写下的 k 元组能对应相同。由于最后的结果可能很大,请你输出它对 998244353(一个大质数)取模后的值。
输入格式
从文件 xpath.in
中读入数据。
本题有多组数据,输入数据第一行一个正整数 T ,表示数据组数。对于每组数据:
第一行一个正整数 k,表示一共有 k 层顶点。
第二行包含 k 个整数 n1,n2,…,nk,依次表示每一层的顶点数量。保证 n1=nk,且 n1≤ni≤2n1(2≤i≤k−1)。
第三行包含 k−1 个整数 m1,m2,…,mk−1,依次表示第 j 层顶点到第 j+1 层顶点的边数。保证 mj≤nj×nj+1。
接下来有 k−1 段输入。第 j(1≤j<k)段输入包含 mj 行,每一行两个整数 u,v,表示第 j 层的 u 号顶点有一条边连向第 j+1 层的 v 号顶点。
数据保证图中不会出现重边。
输出格式
输出到文件 xpath.out
中。
输出共 T 行,每行一个整数,表示该组数据的答案对 998244353 取模后的值。
样例
1
3
2 3 2
4 4
1 1
1 2
2 1
2 3
1 2
2 1
3 1
3 2
1
偶数个交点的方案有 2 个,奇数个交点的方案有 1 个,所以答案为 1。
将下表中路径 1 和路径 2 的方案交换,将会得到相同的方案,例如路径 1 为 (2,3,1) 且路径 2 为 (1,1,2) 的方案与方案 1 是相同的方案,所以不会被计入答案。
路径方案 |
路径 1 |
路径 2 |
交点总数 |
1 |
(1,1,2) |
(2,3,1) |
1 |
2 |
(1,2,1) |
(2,1,2) |
2 |
3 |
(1,2,1) |
(2,3,2) |
0 |
数据范围与提示
对于所有测试数据:2≤k≤100,2≤n1≤100,1≤T≤5。
每个测试点中,保证 n1>10 的数据只有 1 组。
测试点编号 |
k= |
n1≤ |
特殊性质 |
1∼4 |
2 |
10 |
无 |
5∼6 |
10 |
A,B |
7∼8 |
A |
9∼10 |
无 |
11∼13 |
2 |
100 |
14∼15 |
100 |
A,B |
16∼17 |
A |
18∼20 |
无 |
特殊性质 A:对于所有 i(2≤i≤k−1)满足 ni=n1。
特殊性质 B:保证路径方案总数至多为 1。