一块停车场被分割成 $n\times m$ 个网格。网格图中除了障碍不能停车,其余所有地方都被 $1\times 2$ 的车辆停满了。
作为高贵的 R 星玩家,也是停车场的管理员,为了方便出行,你需要依次进行如下操作:
$1.$ 让恰好一辆车瞬间爆炸消失,然后在消失的位置中选择 $k$ 个补上障碍。
$2.$ 对于剩余的车辆,你可以让其中的一辆向前或向后行驶。这一步可以进行任意次。
$3.$ 任何时刻,除开爆炸的车辆,其余车辆至少跟初始位置有一个公共格子。
对于一辆没有爆炸的车,如果它的结束位置和初始位置相比进行了横向位移,能获得 $x$ 分;如果进行了纵向位移,能获得 $y$ 分;否则不得分。
你需要根据网格图的类型,回答如下问题:
$1.$ 网格图中没障碍时:此时 $k=0$。最终有多少种可能的局面?
$2.$ 网格图中有障碍时:此时 $k=1$。设 $id(x,y)=m(x-1)+y$。对于每一辆车,设它占据的位置为 $(a,b)$ 和 $(c,d)$,则它的贡献为第一步让它爆炸之后的所有局面得分之和的 $998244353^{id(a,b)+id(c,d)}$ 倍。请求出所有的贡献之和。
两种局面不同,当且仅当存在一个格子在两种方案中的类型不同。格子有三类:被车辆停靠,障碍或空格子。
答案对 $10^9+7$ 取模。
【输入格式】
从文件 c.in 中读入数据。
本题有多组数据。
第一行输入两个整数 $sid$,$T$ 表示测试点编号和数据组数。样例的 $sid=0$。
对于每组数据:
第一行,输入 $n,m,x,y$。
接下来 $n$ 行,每行输入一个长度为 $m$ 的字符串,表示整个网格图。其中 $\mathsf{U}$ 表示车辆前端,$\mathsf{D}$ 表示车辆后端,$\mathsf{L}$ 表示车辆左端,$\mathsf{R}$ 表示车辆右端,$\mathsf{X}$ 表示障碍。
【输出格式】
输出到文件 c.out 中。
对于每组数据,输出一行表示问题的答案。
【数据范围与提示】
对于 100\% 的数据,$1\le n\times m\le 5\times 10^5$,保证初始局面合法。
对于所有测试点,保证 $\sum n\times m$ 均不超过该测试点对应单组数据范围的五倍。
每个测试点的具体限制见下表:
测试点编号 | $n\times m \leq$ | 特殊性质 |
---|---|---|
1-2 | $40$ | 无 |
3-5 | $5\times 10^5$ | $n=2$ |
6-9 | $5\times 10^3$ | 所有数据均没有障碍 |
10-13 | $5\times 10^3$ | 所有数据均没有障碍 |
14-15 | $5\times 10^4$ | 无 |
16-20 | $5\times 10^5$ | 所有数据均没有障碍 |
21-25 | $5\times 10^5$ | 无 |