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 MAXM = 1005;
const int P = 1e9 + 7;
vector<vector<int> > choose(MAXM, vector<int>(MAXM, 0));
int N, M;
int main() {
  ios::sync_with_stdio(false);
  ifstream fin("input.txt");
  choose[0][0] = 1;
  for (int i = 0; i < MAXM - 1; i++) {
    for (int j = 0; j < MAXM - 1; j++) {
      choose[i + 1][j] = (choose[i + 1][j] + choose[i][j]) % P;
      choose[i + 1][j + 1] = (choose[i + 1][j + 1] + choose[i][j]) % P;
    }
  }
  vector<long long> func(MAXM);
  func[0] = 1;
  func[1] = 1;
  for (int i = 2; i < MAXM; i++) {
    for (int j = 0; j <= i - 1; j++) {
      func[i] = (func[i] + choose[i - 1][j] * func[i - j - 1]) % P;
    }
  }
  cin >> M >> N;
  vector<int> groups(M, 0);
  int cnt = 1;
  for (int i = 0; i < N; i++) {
    map<int, int> conv;
    string str;
    cin >> str;
    for (int j = 0; j < M; j++) {
      if (str[j] == '1') {
        if (conv.count(groups[j]) == 0) {
          conv[groups[j]] = cnt;
          cnt++;
        }
        groups[j] = conv[groups[j]];
      }
    }
  }
  map<int, int> group_cnt;
  for (int i = 0; i < M; i++) {
    group_cnt[groups[i]]++;
  }
  long long answ = 1;
  for (auto i : group_cnt) {
    answ = (answ * func[i.second]) % P;
  }
  cout << answ << "\n";
}
