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 long long int modulo = 1e9 + 7;
void anyade(long long int &a, long long int b) { a = (a + b) % modulo; }
const int limite = 1005;
long long int combi[limite][limite];
long long int parti[limite][limite];
long long int part[limite];
int n, m;
int visto[limite];
int v[50][limite];
long long int sol = 1;
int conjunto[limite];
void calcula(int jj) {
  for (int j = 0; j < m; j++) conjunto[j] = 1;
  for (int i = 0; i < n; i++) {
    int valor = v[i][jj];
    for (int j = 0; j < m; j++)
      if (v[i][j] != valor) conjunto[j] = 0;
  }
  int nuevos = 0;
  for (int j = 0; j < m; j++) {
    if (conjunto[j]) {
      nuevos++;
      visto[j] = 1;
    }
  }
  sol = sol * part[nuevos] % modulo;
}
int main() {
  {
    for (int n = 0; n < limite; n++)
      for (int k = 0; k <= n; k++)
        if (k == 0 or k == n)
          combi[n][k] = 1;
        else
          combi[n][k] = (combi[n - 1][k] + combi[n - 1][k - 1]) % modulo;
    for (int n = 0; n < limite; n++)
      for (int k = 0; k <= n; k++)
        if (n == k)
          parti[n][k] = 1;
        else if (k == 0)
          parti[n][k] = 0;
        else
          parti[n][k] = (parti[n - 1][k - 1] + k * parti[n - 1][k]) % modulo;
    for (int n = 0; n < limite; n++)
      for (int k = 0; k <= n; k++) anyade(part[n], parti[n][k]);
  }
  cin >> m >> n;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      char c;
      cin >> c;
      v[i][j] = c - '0';
    }
  }
  for (int j = 0; j < m; j++)
    if (not visto[j]) calcula(j);
  cout << sol << endl;
}
