#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int n0 = 253, mod = 1e9 + 7;
int n, m, inp[n0][n0], a[n0][n0], dp[n0][1 << 15][2][2];
void add(int& x, int y) {
  x += y;
  x -= (x >= mod) ? mod : 0;
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL);
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      char ch;
      cin >> ch;
      a[i][j] = inp[i][j] = (ch == '.');
    }
  }
  if (m > 15) {
    swap(n, m);
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++) a[i][j] = inp[j][i];
  }
  dp[0][0][0][0] = 1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      for (int mask = 0; mask < (1 << m); mask++) {
        for (int c = 0; c < 2; c++) {
          for (int h = 0; h < 2; h++) {
            int x = dp[i * m + j][mask][c][h];
            if (a[i][j]) {
              add(dp[i * m + j + 1][mask | (1 << j)][1][h], x);
              if ((c && (j > 0)) || (mask >> j & 1))
                add(dp[i * m + j + 1][mask][(c && j > 0)][h], x);
              else if (h == 0)
                add(dp[i * m + j + 1][mask][(c && j > 0)][h + 1], x);
            } else {
              int new_mask = mask;
              if (mask >> j & 1) new_mask ^= 1 << j;
              add(dp[i * m + j + 1][new_mask][0][h], x);
            }
          }
        }
      }
    }
  }
  int res = 0;
  for (int mask = 0; mask < (1 << m); mask++)
    for (int c = 0; c < 2; c++)
      for (int h = 0; h < 2; h++) add(res, dp[n * m][mask][c][h]);
  cout << res;
}
