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;
template <typename T, typename C>
ostream &operator<<(ostream &os, pair<T, C> x) {
  return os << "<" << x.first << ", " << x.second << ">";
}
template <typename T>
auto operator<<(ostream &os, T x) ->
    typename enable_if<is_same<decltype(x.begin()), decltype(x.end())>::value &&
                           !is_same<T, string>::value,
                       ostream &>::type {
  os << "{";
  int cou = 0;
  for (auto c : x) {
    if (cou++) os << ", ";
    os << c;
  }
  return os << "}";
}
template <typename T>
string strmask(T r) {
  string ans;
  for (int i = 0; i < (8 * (int)sizeof(T)); i++) {
    ans += '0' + !!(((T)1 << i) & r);
    if (i % 5 == 4) ans += '.';
  }
  return ans;
}
const int MN = 50, MM = 1010, mod = 1e9 + 7;
unordered_map<bitset<MN>, int> __coustoe;
bitset<MN> in[MM];
char str[MM];
long long binom[MM][MM];
long long spl[MM];
int main() {
  int n, m;
  scanf("%d%d", &m, &n);
  for (int i = 0; i < (n); i++) {
    scanf("%s", str);
    for (int j = 0; j < (m); j++)
      if (str[j] == '1') in[j][i] = 1;
  }
  for (int i = 0; i < (m); i++) __coustoe[in[i]]++;
  long long ans = 1;
  binom[0][0] = 1;
  for (int i = 1; i <= (MM - 1); i++) {
    binom[i][0] = binom[i][i] = 1;
    for (int j = 1; j <= (i - 1); j++)
      binom[i][j] = (binom[i - 1][j] + binom[i - 1][j - 1]) % mod;
  }
  if (0)
    cout << "binom"
         << "["
         << "10"
         << "]["
         << "5"
         << "] = "
         << "binom"
         << "[" << 10 << "][" << 5 << "] = " << binom[10][5] << ' ' << "binom"
         << "["
         << "1000"
         << "]["
         << "5"
         << "] = "
         << "binom"
         << "[" << 1000 << "][" << 5 << "] = " << binom[1000][5] << ' '
         << "binom"
         << "["
         << "1001"
         << "]["
         << "666"
         << "] = "
         << "binom"
         << "[" << 1001 << "][" << 666 << "] = " << binom[1001][666] << ' '
         << endl;
  spl[0] = 1;
  for (int i = 1; i <= (MM - 1); i++) {
    for (int c = 0; c <= (i - 1); c++)
      spl[i] = (spl[i] + binom[i - 1][c] * spl[i - c - 1]) % mod;
  }
  for (int i = 0; i < (20); i++)
    if (0)
      cout << "spl"
           << "["
           << "i"
           << "] = "
           << "spl"
           << "[" << i << "] = " << spl[i] << ' ' << endl;
  for (auto &x : __coustoe) ans = ans * spl[x.second] % mod;
  if (0)
    cout << "count"
         << " = " << (__coustoe) << ' ' << endl;
  printf("%lld\n", (ans % mod + mod) % mod);
}
