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;
using ll = long long;
using ld = long double;
using pii = pair<int, int>;
int const N = 1000 + 20, M = 50 + 5, mod = 1e9 + 7;
int n, m, dp[N], ans = 1;
int fac[N];
ll a[N];
inline int pw(int a, int b) {
  int res = 1;
  while (b) {
    if (b & 1) res = 1ll * res * a % mod;
    a = 1ll * a * a % mod;
    b >>= 1;
  }
  return res;
}
inline int inv(int x) { return pw(x, mod - 2); }
inline int Comb(int n, int k) {
  return 1ll * fac[n] * inv(fac[k]) % mod * inv(fac[n - k]) % mod;
}
void pre() {
  fac[0] = 1;
  for (int i = 1; i < N; i++) fac[i] = 1ll * fac[i - 1] * i % mod;
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  pre();
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    string s;
    cin >> s;
    for (int j = 0; j < n; j++) {
      if (s[j] == '1') a[j] |= (1ll << i);
    }
  }
  dp[0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i; j++)
      dp[i] = (dp[i] + 1ll * dp[i - j] * Comb(i - 1, j - 1)) % mod;
  sort(a, a + n);
  int cnt = 0;
  for (int i = 0; i < n; i++) {
    cnt++;
    if (a[i] != a[i + 1] || i == n - 1)
      ans = 1ll * ans * dp[cnt] % mod, cnt = 0;
  }
  cout << ans << '\n';
}
