#2865. 迷宫

迷宫

题目描述

迷宫是一个n×\red{n ×} m\red{m}的网格,第i\red{i}j\red{j}列的格子会包含一个方向指示di,j\red{d_{i,j}}和一个权值vi,j\red{v_{i,j}}。 假设起点为格子(sx,sy)\red{(sx, sy)(}即第sx\red{sx}行第sy\red{sy}列的格子),一开始牛妹左脚踏入格子 (sx,sy)\red{(sx, sy),}分数加上vsx,sy\red{v_{sx,sy} ,}然后该格子的权值变为它的相反数?vsx,sy\red{v_{sx,sy}}。 之后有两种选择:

(1)\red{(1)}结束游戏,当前分数为最终分数。

(2)\red{(2)}按照当前格子的方向指示走到下一个格子(x,y)\red{(x, y)}。如果踏入当前格子的是左脚, 则右脚踏入(x,y)\red{(x, y),}并且分数减去 vx,y\red{v_{x,y}};如果踏入当前格子的是右脚,则左脚踏入 (x,y)\red{(x, y),}分数加上 vx,y\red{v_{x,y}}。之后vx,y\red{v_{x,y}}变为它的相反数?vx,y\red{v_{x,y}}。然后继续做下一个选择。 注意,必须存在下一个格子才能选择(2)\red{(2),}否则只能选择(1)\red{(1)}。具体的下一个格子的 定义如下:

格子的方向指示由 $\red{^v<>}$ 四个字符表示,假设当前格子为(i,j)\red{(i, j),}

如果di,j=\red{d_{i,j}= }'^',则表示往上走,即下一个格子为(i1,j)\red{(i - 1, j)}

如果di,j=\red{d_{i,j}= }'v\red{v}',则表示往下走,即下一个格子为 (i+1,j)\red{(i + 1, j)}

如果di,j=\red{d_{i,j}= }'<\red{<}',则表示往左走,即下一个格子为(i,j1)\red{(i, j - 1)}

如果di,j=\red{d_{i,j}= }'>\red{>}',则表示往右走,即下一个格子为 (i,j+1)\red{(i, j + 1)}

如果格子(i,j)\red{(i, j)}的下一个格子(x,y)\red{(x, y)}不满足1\red{1 ≤} x\red{x ≤} n\red{n}1\red{1 ≤} y\red{y ≤} m\red{m,}那么认为格子 (i,j)\red{(i, j)}不存在下一个格子。

牛妹的初始分数为 0\red{0,}她想知道,对于每个(i,j)(1\red{(i, j) (1 ≤} i\red{i ≤} n,1\red{n, 1 ≤} j\red{j ≤} m)\red{m)}作为起点, 她能得到的最高的最终分数是多少。由于她不想输出文件太大,假设答案为

(ansi,j)n×m\red{(ans_{i,j})_{n×m},}你只需要输出

i=1nj=1m(ansi,j+B)C(i1)m+j1mod264\red{\sum_{i=1}^{n}{\sum_{j=1}^{m}{(ans_{i,j}+B)C^{(i-1)m+j-1}mod2^{64}}}}

其中B=1015,C=2×1015+21\red{B = 10^{15}, C = 2 \times10^{15} + 21}

如果以(i,j)\red{(i, j)}为起点,能得到比任意正整数大的最终分数,则令 ansi,j=B\red{ans_{i,j} = B}

输入格式

第一行,两个正整数n,m\red{n, m,}以空格相隔。

接下来n\red{n}行,第i\red{i }行是字符串di\red{di,}其第j\red{j}个字符(从 1\red{1 }开始)di,j\red{d_{i,j}}表示第i\red{i}行第j\red{j}列格子 的方向指示。

接下来n\red{n}行,第i\red{i}m\red{m}个整数 vi,1,vi,2,...,vi,m\red{v_{i,1}, v_{i,2}, . . . , v_{i,m} ,}以空格相隔,vi,j\red{v_{i,j}}表示第i\red{i}行第j\red{j}列格子 的初始权值。

输出格式

输出一个整数,表示答案。

样例

输入样例

3 3
><>
>vv
^<<
1 2 3
4 5 6
7 8 9

输出样例

3946712175731523781

提示

样例 1\red{1 }说明

对应的答案为

123\red{1 2 3}

7 5 6\red{7 ~5 ~6}

8 8 17\red{8 ~8~ 17}

数据范围

对于 10%\red{10\%}数据,满足1\red{1 ≤} n,m\red{n, m ≤} 10\red{10}

对于 40%\red{40\%}数据,满足1\red{1 ≤} n,m\red{n, m ≤} 100\red{100}

对于 100%\red{100\%}数据,满足1\red{1 ≤} n,m\red{n, m ≤} 1000\red{1000}

di,j=\red{d_{i,j}= }^v\red{v }<\red{< }>,1e9\red{>, -1e9 ≤} vi,j\red{v_{i,j} ≤} 1e9,,1\red{1e9, , ∀1 ≤} i\red{i ≤} n,1\red{n, 1 ≤} j\red{j ≤} m\red{m}

注意:由于答案可能较大,对于 C/C++\red{C/C++}语言,你可能需要使用 longlong\red{long long} 数据 类型进行计算。在输出答案时,可能不需要实际的取模,只需要使用 unsigned\red{unsigned } longlong\red{long long}`数据类型的自然溢出即可