YJC plays automaton

Accepts: 1
Submissions: 14
Time Limit: 12000/6000 MS (Java/Others)
Memory Limit: 524288/262144 K (Java/Others)
问题描述
YJC是个小火车老司机,所以他是袜子坊烧饼栏目举办的“吃的更圆”竞赛金牌获得者,他去吃特色菜时看到一个$n+1$个状态的自动机,编号为$0到n$,其中0号点表示$NULL$,他非常好奇于是开始了研究:
他选取了一个初始状态集合$S$,发现其有如下有趣性质:
存在一个字符串$str$,使得$S$中的每一个元素在自动机上运行了$str$之后,得到的结束状态集合包含$NULL$和至少一个$NULL$以外的状态,即$S$中运行$str$后到达$NULL$的状态数目在$[1,|S|-1]$中。
满足这个性质的集合叫做YJC集,注意YJC集不能包含$NULL$。
他想知道有多少个YJC集。

关于自动机在本题中你可以这样理解:
自动机有$n+1$个状态,编号$0$到$n$,其中$0$是$NULL$状态,设字符集大小为$m$。
有转移函数$\delta(i,j)(0\leq i \leq n,1\leq j\leq m)$,满足$0\leq \delta(i,j)\leq n且\delta(0,j)=0$
一个状态t在自动机上运行字符串str可以参考以下程序
$for$  $i=0..str.length-1$
    $t\leftarrow \delta(t,str[i])$
你还可以查看
https://zh.wikipedia.org/wiki/自動機理論
输入描述
第一行两个正整数$n,m(1\leq n\leq 888,1\leq m\leq 8)$,表示自动机大小和字符集大小。
$以下n行,每行m个元素,表示转移函数\delta (i,j),即第i个状态读取到字符j的转移目标,若为0则表示转移到NULL。$
$NULL只能转移到NULL。$

最终测试时,输入文件不超过11000行,共31组。

由于测试时是总时限,若你的程序最坏情况下可以在0.5s内通过1组极限数据(CPU 3.0 GHz),一般可以通过systemtest。
输出描述
一行一个整数,表示YJC集的个数。
答案对$998244353(7\times 17\times 2^{23}+1,一个质数)$取模。
输入样例
3 2
3 0
3 0
0 3
输出样例
3
Hint
可能的YJC集有:$\{1,3\},\{2,3\},\{1,2,3\}$
状态1,2是等价的,显然${1,2}$不是YJC集