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;
const int maxn = 1000 + 10;
const int mod = 1e+9 + 7;
inline long long powa(long long a, long long x) {
  long long ans = 1;
  for (; x; x >>= 1) {
    if (x & 1) ans = ans * a % mod;
    a = a * a % mod;
  }
  return ans;
}
inline long long inv(long long a) { return powa(a, mod - 2); }
long long n, m;
long long p[maxn], pi[maxn];
long long a[maxn], b[maxn], bn;
long long f[maxn][maxn];
void pre() {
  long long i;
  p[0] = pi[0] = 1;
  for (i = 1; i < maxn; i++)
    p[i] = p[i - 1] * i % mod, pi[i] = pi[i - 1] * inv(i) % mod;
}
void read() {
  long long i, j;
  char c;
  scanf("%d%d", &n, &m);
  for (i = 0; i < m; i++)
    for (j = 0; j < n; j++) {
      cin >> c;
      a[j] |= ((c == '1') * 1ll << i);
    }
  sort(a, a + n);
  bn = 0;
  for (i = 0; i < n; i = j) {
    for (j = i + 1; j < n && a[j] == a[i]; j++)
      ;
    b[bn++] = j - i;
  }
}
long long C(long long n, long long r) {
  if (r > n || r < 0) return 0;
  return p[n] * pi[r] % mod * pi[n - r] % mod;
}
void dp(long long n) {
  if (f[n][n] != -1) return;
  long long i, j;
  for (i = 1; i <= n; i++) f[n][i] = powa(i, n);
  for (i = 2; i <= n; i++) {
    for (j = i - 1; j >= 1; j--)
      f[n][i] = (f[n][i] - f[n][j] * C(i, j) % mod + mod) % mod;
  }
}
void solve() {
  long long i, j, ans, fans = 1;
  memset(f, -1, sizeof(f));
  for (i = 0; i < bn; i++) {
    ans = 0;
    dp(b[i]);
    for (j = 1; j <= b[i]; j++) ans += f[b[i]][j] * pi[j] % mod;
    (fans *= ans % mod) %= mod;
  }
  cout << fans;
}
int main() {
  pre();
  read();
  solve();
  return 0;
}
