7601: 宾果游戏

内存限制:128 MB 时间限制:2 S
题面:Markdown 评测方式:文本比较 上传者:
提交:1 通过:1

题目描述

一个 $ n\times m $ 的表格,玩 bingo 游戏。 主持人每轮随机报出一个位置,你要在表格中给这个位置做上标记,当某一行/一列上的格子全部被标记时,游戏结束。 然而现在你不小心将桌上的墨水打翻了,导致表格中有 $ k $ 个位置被墨水污染无法做上标记。 请注意,主持人依然会报出被墨水污染的位置,也就是说,每个位置被报到的概率都还是 $ \frac{1}{n\times m}$ 。 请输出游戏结束的期望轮数对 $998244353$ 取模的结果,若游戏无法结束,则输出 $ -1$ 。 令 $ M=998244353 $ 。可以证明答案能够表示为最简分数 $ \frac{p}{q} $,其中 $ p $ 和 $ q $ 是正整数且 $ q \not \equiv 0 \pmod M $。则你需要输出 $ p \cdot q^{-1} \pmod M $,其中 $ q^{-1} $ 表示 $ q $ 在模 $ M $ 意义下的乘法逆元。换句话说,输出满足 $ 0 \leq x< M $ 且 $ x \cdot q \equiv p \pmod M $ 的整数 $ x $。可以证明,符合条件的 $ x $ 是唯一的。 --- 为了防止输入过大带来的常数问题,`C++` 选手请尽量使用关闭流同步的 `std::cin` 和 `std::cout` 实现输入输出,否则可能出现因读入输出问题导致的 TLE 等。 ```cpp int main(){ std::ios::sync_with_stdio(0); std::cin.tie(0); // your code return 0; } ```

输入格式

第一行一个整数 $ T $ $ \left(1\le T\le 5\right)$ 表示数据组数。 每组数据第一行三个正整数 $ n, m, k $ $ \left(2\le n \le 10^6, 2\le m \le 10^6, 0\le k \le n\times m \le 10^6\right) $。 接下来 $ k $ 行,每行两个正整数 $ x, y $ $ \left(1\le x\le n, 1\le y \le m\right) $,表示被污染的格子位置。

输出格式

输出 $ T $ 行,对于每组数据输出一行一个正整数,表示游戏结束的期望轮数,若无法结束则输出 $ -1$ 。

输入样例 复制

3
2 2 0
2 2 1
1 1
3 3 0

输出样例 复制

3
665496240
891289608