#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;
}
