#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int n, m, mat[251][251];
int dp[251][(1 << 15)][2][2];
void tira(int& mask, int p) {
  if (mask & (1 << p)) mask ^= (1 << p);
}
void add(int& a, int b) {
  a += b;
  if (a >= mod) a -= mod;
}
int solve(int linha, int coluna, int mask, int foi, int salvo) {
  if (foi > 1) return 0;
  if (linha == n) return solve(0, coluna + 1, mask, foi, 0);
  if (coluna == m) return 1;
  int& ret = dp[linha * m + coluna][mask][foi][salvo];
  if (ret != -1) return ret;
  ret = 0;
  if (!mat[linha][coluna]) {
    tira(mask, linha);
    add(ret, solve(linha + 1, coluna, mask, foi, 0));
  } else {
    bool protegido = (salvo | (mask & (1 << linha)));
    add(ret, solve(linha + 1, coluna, mask, (1 ^ protegido) + foi, salvo));
    add(ret, solve(linha + 1, coluna, mask | (1 << linha), foi, 1));
  }
  return ret;
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    for (int j = 0; j < m; j++) {
      mat[i][j] = (s[j] == '.');
    }
  }
  if (n > m) {
    int aux[251][251];
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        aux[i][j] = mat[i][j];
      }
    }
    swap(n, m);
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        mat[i][j] = aux[j][i];
      }
    }
  }
  memset(dp, -1, sizeof dp);
  printf("%d\n", solve(0, 0, 0, 0, 0));
}
