AT_joi2011yo_f JOI 旗 (JOI Flag)

Description

[problemUrl]: https://atcoder.jp/contests/joi2011yo/tasks/joi2011yo_f 情報オリンピック日本委員会では,今年の日本情報オリンピック (JOI) を宣伝するために,JOI のロゴをモチーフにした旗を作ることになった.旗は「良い旗」でなければならない.「良い旗」とは,アルファベットの J,O,I のいずれかの文字を,縦 $ M $ 行,横 $ N $ 列の長方形状に並べたもので,J,O,I が以下の図のように (すなわち,J の右隣に O が,その J の下隣に I が) 並んでいる箇所が旗の少なくとも $ 1 $ か所にあるものである. ![2011-yo-t6-fig01.png](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_joi2011yo_f/5e8a5b1cd7bd4f61ee13e20be6a3ae7c602df0d9.png) 以下の図に,「良い旗」の例を $ 2 $ つ示す. ![2011-yo-t6-fig02.png](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_joi2011yo_f/87fb8ec8b7959c37b5142d7ab6abc6a6c8a8477f.png) 以下の図に,「良い旗」ではない例を $ 2 $ つ示す. ![2011-yo-t6-fig03.png](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_joi2011yo_f/36ddacc7ae97b082eee44eaf45f99ad0f8e96e46.png) いま $ M,\ N $ の値,および旗の一部の場所について J,O,I のどの文字にするかが決まっており,入力としてその情報が与えられる.考えられる「良い旗」は何通りあるかを計算し,その数を $ 100\,000\ (=\ 10^5) $ で割った余りを出力するプログラムを作成せよ.

Input Format

入力は $ 1\ +\ M $ 行からなる. $ 1 $ 行目には旗の大きさを表す $ 2 $ つの整数 $ M,\ N $ ($ 2\ \leqq\ M\ \leqq\ 20 $,$ 2\ \leqq\ N\ \leqq\ 20 $) が空白で区切られて書かれている. $ 1\ +\ i $ 行目 ($ 1\ \leqq\ i\ \leqq\ M $) には,$ N $ 文字からなる文字列が書かれている.各文字は J,O,I,? のいずれかであり,$ j $ 文字目 ($ 1\ \leqq\ j\ \leqq\ N $) が J,O,I のいずれかである場合は $ i $ 行 $ j $ 列の場所の文字がそれぞれ J,O,I に決まっていること,? である場合はまだ決まっていないことを表す.

Output Format

考えられる「良い旗」の個数を $ 100\,000\ (=\ 10^5) $ で割った余りを $ 1 $ 行で出力せよ. - - - - - -

Explanation/Hint

### Sample Explanation 1 入力例 $ 1 $ においては,以下の図の $ 4 $ 通りの「良い旗」が考えられる. !\[2011-yo-t6-fig04.png\](https://img.atcoder.jp/joi2011yo/2011-yo-t6-fig04.png) - - - - - - ### Sample Explanation 2 \- - - - - - ### Sample Explanation 3 \- - - - - - ### Sample Explanation 4 入力例 $ 4 $ においては,「良い旗」は $ 2\,428\,218 $ 通り考えられるので,それを $ 100\,000\ (=\ 10^5) $ で割った余りである $ 28\,218 $ を出力する.