#include <bits/stdc++.h>
using namespace std;
const int Mod = 1e9 + 7;
const int N = 252;
const int K = 16;
int n, m, dp[N][1 << K][2][2];
char c[N][N], cp[N][N];
void rotate() {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) cp[j][i] = c[i][j];
  swap(n, m);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) c[i][j] = cp[i][j];
}
void add(int &a, int x) { a = (a + x) % Mod; }
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) cin >> c[i][j];
  if (m > 15) rotate();
  for (int mask = 0; mask < 1 << m; mask++)
    for (int i = 0; i < 4; i++) dp[n * m][mask][i / 2][i % 2] = 1;
  for (int i = n * m - 1; i > -1; i--) {
    int row = i / m, col = i % m;
    for (int mask = 0; mask < 1 << m; mask++) {
      bool coveredUp = (mask >> col) & 1;
      if (c[row][col] == 'x') {
        int nmask = coveredUp ? mask - (1 << col) : mask;
        for (int j = 0; j < 4; j++)
          add(dp[i][mask][j / 2][j % 2], dp[i + 1][nmask][j / 2][0]);
      } else {
        int nmask = mask | (1 << col);
        for (int j = 0; j < 4; j++)
          add(dp[i][mask][j / 2][j % 2],
              dp[i + 1][nmask][j / 2][1 - (col == m - 1)]);
        if (coveredUp)
          for (int j = 0; j < 4; j++)
            add(dp[i][mask][j / 2][j % 2],
                dp[i + 1][mask][j / 2][col == m - 1 ? 0 : j % 2]);
        else {
          for (int j = 0; j < 2; j++)
            add(dp[i][mask][j][1], dp[i + 1][mask][j][1 - (col == m - 1)]);
          add(dp[i][mask][1][0], dp[i + 1][mask][0][0]);
        }
      }
    }
  }
  cout << dp[0][0][1][0] << endl;
}
