T463052 森林
题目描述
小 A 来到了一片森林,这森林的形状是一个 n 行 m 列的矩阵,每个格子长着一棵高为 2 的树。
每个格子还写着一个字母:’S’ 或者’E’。
小 A 看着这片森林很不爽,决定把树都推倒。他推树的顺序是:第一行从左往右,然后第二行从左往右,然后第三行从左往右……
他依次走过每一格:
1. 如果当前格子已经被之前倒下的树所占据,就跳过这一格。
2. 否则尝试把这棵树往这个格子上写的方向推倒,即:如果是’S’ 就向下推,如果是’E’ 就向右推。一棵树被推倒之后会占据自己这格以及它那个方向的下一格。如果它要倒出森林外面了,或者它要占据的格子已经被别的树给占据了,就跳过。
3. 否则尝试把这棵树往另一个方向推倒。如果不行也跳过。
最后他会统计这片森林总共被推倒的树的数量。
现在小 A 想知道:对于所有的$2^{nm}$片森林,他将会推倒的树的数量总和。对读入的 p 取模。
对上面的描述有疑问的可以看样例解释。
输入格式
一行三个数,n, m, p。
输出格式
一行一个数表示答案。
说明/提示
## 样例1解释
3 行 4 列,总共有 $2^{12}$ 种可能的森林。对于其中一种比如:
SEEE
ESSS
EESS
推完之后的情况是:
SE0E
0SS0
E00S
推的树的总数量是 5。
## 数据范围
对于所有数据,$3 \le p \le 10^9$。
20% 的数据,$n \le 5, m \le 5$。
40% 的数据,$n \le 12, m \le 12$。
60% 的数据,$n \le 12, m \le 16$。
100% 的数据,$n \le 12, m \le 30$。