Alone
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯有一个 nm 列,仅由整数 01 构成的 01 矩阵,其中 0 表示白色格子,1 表示黑色格子。
\hspace{15pt}他定义 01 矩阵中从上往下数第 i 行和从左往右数第 j 列的单元格 (i, j) 为“孤立点”,当且仅当:
\hspace{23pt}\bullet\,该格子是黑色的;
\hspace{23pt}\bullet\,在第 i 行中,它是唯一的黑色格子;
\hspace{23pt}\bullet\,在第 j 列中,它也是唯一的黑色格子。
\hspace{15pt}矩阵的孤立度定义为其中所有“孤立点”的个数。

\hspace{15pt}现在,小苯预先确定了 k 个不同位置的格子必须是黑色。给定这 k 个格子的位置 (x_1, y_1), (x_2, y_2), \dots, (x_k, y_k)
\hspace{15pt}小苯考虑所有满足以下条件的 n \times m 的 01 矩阵,这些矩阵都包含所有预先确定的黑色格子,其余格子的颜色由小苯自由选择。在所有可能的矩阵中,他想知道这些矩阵的孤立度之和是多少。

\hspace{15pt}换句话说,对所有满足条件的矩阵,将每个矩阵的孤立度相加,求这个总和。由于答案可能很大,请将答案对 998\,244\,353 取模后输出。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 2 \times 10^4\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行输入三个整数 n, m, k\left(1 \leqq n, m \leqq 10^9;\, 0 \leqq k \leqq \min(n \times m, 2 \times 10^5)\right),表示 01 矩阵的行数、列数和预先确定的黑色格子个数。
\hspace{15pt}此后 k 行,第 i 行输入两个整数 x_i, y_i\left(1 \leqq x_i \leqq n;\, 1 \leqq y_i \leqq m\right),表示第 i 个预先确定的黑色格子位置。保证这 k 个格子两两不同。

\hspace{15pt}除此之外,保证单个测试文件的 k 之和不超过 3 \times 10^5

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行输出一个整数表示所有满足条件的矩阵的孤立度之和对 998\,244\,353 取模的结果。
示例1

输入

复制
2
2 2 0
2 2 1
1 1

输出

复制
8
3