#C6. 路径求和问题

路径求和问题

路径求和问题

题目描述

有一个 nnmm 列的网格。网格里的每个格子都写着一个整数,其中第 ii 行第 jj 列的格子里写着整数 ai,ja_{i,j}

(i,j)(i,j) 表示位于第 ii 行第 jj 列的格子。你现在需要从 (1,1)(1,1) 出发并前往 (n,m)(n,m)。当位于格子 (i,j)(i,j) 时,可以选择走到右方的格子 (i,j+1)(i,j+1)(若 j<mj<m),也可以选择走到下方的格子 (i+1,j)(i+1,j)(若 i<ni<n)。

SS 表示路径上每个格子里的整数形成的集合,包括 a1,1a_{1,1}an,ma_{n,m}。路径的价值定义为 SS 中元素的数量(集合中不包含重复元素)。对于所有可能的路径,求它们的价值之和。

由于答案可能很大,请将答案对 998244353998244353 取模后输出。

输入格式

有多组测试数据。第一行输入一个整数 TT1T1031\le T\le 10^3)表示测试数据组数。

对于每组测试数据:

  • 第一行输入两个整数 nnmm1n,m2×1051\le n,m\le 2\times 10^51n×m2×1051\le n\times m\le 2\times 10^5),表示网格的行数和列数。
  • 接下来 nn 行,第 ii 行输入 mm 个整数 ai,1,ai,2,,ai,ma_{i,1},a_{i,2},\cdots,a_{i,m}1ai,jn×m1\le a_{i,j}\le n\times m),其中 ai,ja_{i,j} 表示格子 (i,j)(i,j) 里的整数。

保证所有数据 n×mn\times m 之和不超过 2×1052\times 10^5

输出格式

每组数据输出一行一个整数,表示所有可能的路径的价值之和对 998244353998244353 取模后的结果。

样例 #1

样例输入 #1

3
2 3
5 2 1
1 5 5
1 1
1
2 3
3 3 3
3 3 3

样例输出 #1

7
1
3

样例 #1 解释

对于第一组样例数据,有 33 条可能的路径:

  • 第一条路径是 (1,1)(1,2)(1,3)(2,3)(1,1)\to(1,2)\to(1,3)\to(2,3)S={1,2,5}S=\{1,2,5\},价值为 33
  • 第二条路径是 (1,1)(1,2)(2,2)(2,3)(1,1)\to(1,2)\to(2,2)\to(2,3)S={2,5}S=\{2,5\},价值为 22
  • 第三条路径是 (1,1)(2,1)(2,2)(2,3)(1,1)\to(2,1)\to(2,2)\to(2,3)S={1,5}S=\{1,5\},价值为 22

所以答案是 3+2+2=73+2+2=7

第二组数据只有一个格子,唯一的路径价值为 11

第三组数据所有格子都是 33,每条路径的价值都是 11,共 33 条路径,答案为 33

数据范围与子任务

子任务 测试点 特殊性质
1 1~4 n,m10n,m\le 10
2 5~10 n×m5000n\times m\le 5000
3 11~14 n×m2×105n\times m\le 2\times 10^5,每个数字出现次数 2\le 2
4 15~18 n×m2×105n\times m\le 2\times 10^5,出现数字种类数 100\le 100
5 19~25 无特殊限制

对于所有数据:1n,m2×1051\le n,m\le 2\times 10^51n×m2×1051\le n\times m\le 2\times 10^51ai,jn×m1\le a_{i,j}\le n\times m(n×m)2×105\sum(n\times m)\le 2\times 10^5