You are given an integer m.

Let M = 2m - 1.

You are also given a set of n integers denoted as the set T. The integers will be provided in base 2 as n binary strings of length m.

A set of integers S is called "good" if the following hold. 

  1. If <image>, then <image>. 
  2. If <image>, then <image>
  3. <image>
  4. All elements of S are less than or equal to M. 



Here, <image> and <image> refer to the bitwise XOR and bitwise AND operators, respectively.

Count the number of good sets S, modulo 109 + 7.

Input

The first line will contain two integers m and n (1 ≤ m ≤ 1 000, 1 ≤ n ≤ min(2m, 50)).

The next n lines will contain the elements of T. Each line will contain exactly m zeros and ones. Elements of T will be distinct.

Output

Print a single integer, the number of good sets modulo 109 + 7. 

Examples

Input

5 3
11010
00101
11000


Output

4


Input

30 2
010101010101010010101010101010
110110110110110011011011011011


Output

860616440

Note

An example of a valid set S is {00000, 00101, 00010, 00111, 11000, 11010, 11101, 11111}.
#include <bits/stdc++.h>
using namespace std;
int l, n;
int par[1005];
char str[55][1005];
int f(int x) { return par[x] == x ? x : par[x] = f(par[x]); }
int dp[1005][1005];
void preprocess() {
  dp[1][1] = 1;
  for (int i = (2); i <= (1000); i++) {
    for (int j = (1); j <= (i); j++) {
      dp[i][j] = (dp[i - 1][j - 1] + 1LL * j * dp[i - 1][j]) % 1000000007;
    }
  }
}
int calculate(int sz) {
  int ret = 0;
  for (int i = (1); i <= (sz); i++) {
    ret += dp[sz][i];
    if (ret >= 1000000007) ret -= 1000000007;
  }
  return ret;
}
int main() {
  preprocess();
  scanf("%d %d", &l, &n);
  for (int i = (1); i <= (n); i++) scanf(" %s", str[i] + 1);
  for (int i = (1); i <= (l); i++) par[i] = i;
  for (int i = (1); i <= (l); i++)
    for (int j = (i + 1); j <= (l); j++) {
      bool is_pair = true;
      for (int k = (1); k <= (n); k++)
        if (str[k][i] != str[k][j]) {
          is_pair = false;
          break;
        }
      if (is_pair) {
        int pa = f(i), pb = f(j);
        if (pa != pb) par[pa] = pb;
      }
    }
  int ans = 1;
  for (int i = (1); i <= (l); i++)
    if (par[i] == i) {
      int sz = 0;
      for (int j = (1); j <= (l); j++)
        if (f(j) == i) sz++;
      ans = 1LL * ans * calculate(sz) % 1000000007;
    }
  printf("%d\n", ans);
  return 0;
}
