沉着冷静的 Unterzee 船长一直在追捕海盗诗人。他们的竞争由来已久,且早已没有了界限。每当船长抵达海盗诗人预期的港口时,他总是找不到人,只留下一条海盗诗人承认她几天前已离开港口的消息,并留给船长那永无止境的杰作中的又一行诗句:Zong of the Zee。
船长和海盗诗人都知道,Zong 的终结将为他们的竞争画上最终的句号。一旦船长找齐了它,他们就会相遇,最终的决战便会开始。
港口接港口,诗行接诗行……也许,答案一直都在那里。船长知道他不可能活得足够久去见证 Zong 的终结,因此他唯一能做的就是智胜海盗诗人。
到目前为止,这首诗的每一行都是第一行的变位词。此外,船长怀疑所有的诗行都是通过相同的方式获得的,即对前一行应用某个固定的置换 $\pi_1, \dots, \pi_n$。也就是说,新的一行中位置 $i$ 上的字符,是前一行中位置 $\pi_i$ 上的字符。
船长想要通过猜测预期的置换来恢复整首诗。但首先,他想知道他需要检查多少种变体。船长仔细抄录了诗的每一行,共 $m$ 行,每行 $n$ 个 Unterzian 字母。不幸的是,有时很难理解船长的字迹,因此一些字母(但每行最多一个)可能被问号(“?”)所取代,这意味着你不确定它究竟是什么字母。你需要计算与给定数据一致的置换 $\pi_1, \dots, \pi_n$ 的数量:换句话说,即存在一种方式将所有的“?”替换为某些 Unterzian 字母,使得每一行诗都可以通过对前一行应用该置换得到。
输出答案对 $10^9 + 7$ 取模的结果。船长知道如何处理这些信息。大概吧。
输入格式
第一行包含两个整数 $m$ 和 $n$ ($2 \le n, m \le 3000$)。
接下来的 $m$ 行中,第 $i$ 行包含诗的第 $i$ 行。每一行恰好包含 $n$ 个字符,每个字符要么是一个 Unterzian 字母,要么是一个问号(“?”)。每一行最多包含一个问号。
每个 Unterzian 字母的 ASCII 码在 33 到 126 之间,但“?”除外,其 ASCII 码为 63。
输出格式
输出一个整数,即问题的答案。
样例
样例输入 1
3 3 ib. .?b b.?
样例输出 1
1
样例输入 2
2 4 abb? ba?a
样例输出 2
4