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$。