package main
import (
"bufio"
"fmt"
"os"
)
const MOD int64 = 1000000007
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var m, n int
if _, err := fmt.Fscan(in, &m, &n); err != nil {
return
}
t := make([]string, n)
for i := 0; i < n; i++ {
fmt.Fscan(in, &t[i])
}
cnt := make(map[uint64]int)
for j := 0; j < m; j++ {
var mask uint64
for i := 0; i < n; i++ {
if t[i][j] == '1' {
mask |= uint64(1) << uint(i)
}
}
cnt[mask]++
}
bell := make([]int64, m+1)
bell[0] = 1
dp := make([]int64, m+2)
nxt := make([]int64, m+2)
dp[0] = 1
for i := 1; i <= m; i++ {
nxt[0] = 0
var sum int64
for k := 1; k <= i; k++ {
v := dp[k-1] + int64(k)*dp[k]%MOD
if v >= MOD {
v -= MOD
}
nxt[k] = v
sum += v
if sum >= MOD {
sum -= MOD
}
}
dp, nxt = nxt, dp
bell[i] = sum
}
ans := int64(1)
for _, c := range cnt {
ans = ans * bell[c] % MOD
}
fmt.Fprintln(out, ans)
}