← Home
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)
}