题目描述
Menji 喜欢看乒乓球比赛,但由于观赛的人太多,他只能听到一部分的信息。
乒乓球赛一共包含 T 局,一局乒乓球的过程如下:
两位选手分别有得分,用 sA 和 sB 表示,初始 sA=sB=0。
接下来会进行若干个回合,在第 i 个回合,会有一个获胜者 wini(wini∈{A,B}),若 wini=A 则 A 的得分 +1,即 sA=sA+1,否则 B 的得分 +1,即 sB=sB+1。当任意一名选手达到 11 分,且领先另一名选手至少 2 分时(即 max(sA,sB)≥11, max(sA,sB)−min(sA,sB)≥2),该局立刻结束。
对于每一局比赛,Menji 听到了最终该局进行的回合数 n,以及一部分时刻结束时的比分,例如 Menji 可能在第 5 回合结束时听到比分是 3:2,但 Menji 并不知道哪一名选手获得了 3 分,只知道其中一名选手获得了 3 分,另外一名选手获得了 2 分。
具体的,Menji 的信息可以被表示为一个非负整数 n,表示该局恰好进行了 n 个回合,以及 2 个长为 n 的序列 a1⋯an,b1⋯bn。对于每一个 i(1≤i≤n),若 ai=bi=−1,则 Menji 没有听到任何第 i 个回合结束时的信息,否则保证 0≤ai,bi≤n,表示在第 i 个回合结束时,一定满足 sA=ai,sB=bi 或 sA=bi,sB=ai。
显然,很多时候 Menji 的信息并不能还原比赛每一局每一回合的获胜者,甚至有时候 Menji 的信息会是错误的。Menji 想要知道,有多少个获胜者序列 win1⋯winn 满足他已知的所有信息?
由于答案可能很大,请输出答案对 998244353 取模的结果。
输入格式
第一行一个整数 T(1≤T≤105),表示乒乓球比赛的局数。
对于每一局:
第一行一个整数 n,表示比赛恰好进行了 n(1≤n≤105) 回合。
之后 n 行,每行两个整数 ai,bi,满足 ai=bi=−1 或 0≤ai,bi≤n,表示 Menji 已知的一部分信息。
保证总回合数不超过 5×105,即 ∑n≤5×105。
输出格式
对于每一局,输出一行一个数,表示可能的获胜者序列个数,对 998244353 取模。
提示
样例解释
比赛总共进行了 6 局。
- 对于第一局,恰好进行了 11 个回合结束,一定是某一选手连胜了 11 回合,所以获胜者序列一定是全 A 或是全 B,故答案为 2。
- 对于第二局,恰好进行了 11 个回合结束,但第二回合结束的比分是 1:1,最终至多只能达到 10:1 的比分,因此不存在合法的获胜者序列使得恰好 11 回合结束,故答案为 0。
- 对于第三局,显然不可能在 11 个回合内达到 1:11 的比分,故答案为 0。
- 对于第四局,若第 20 个回合的比分达到 11:9,则该局会立刻结束,不会进行到第 22 个回合,故答案为 0。
- 对于第五局,双方的得分一定是先达到 10:10,之后其中一名选手连胜 2 局,故答案为 (1020)×2=369512。
- 对于第六局,容易发现不可能恰好进行 23 个回合时结束,故答案为 0。
- 对于第七局,我有一个完美的解释,可惜写不下了。
题目来源
题目来自 THUPC2025(2025年清华大学学生程序设计竞赛暨高校邀请赛)初赛,信息来源于 THUSAAC 仓库。