#include <bits/stdc++.h>
using namespace std;
const int N = 255;
const int M = 16;
const int mod = (int)1e9 + 7;
char grid[N][N], ngrid[N][N];
long long dp[2][M][1 << M][2][2];
void add(long long& a, long long b) {
  a += b;
  while (a >= mod) {
    a -= mod;
  }
}
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%s", grid[i]);
  }
  if (n < m) {
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        ngrid[j][i] = grid[i][j];
      }
    }
    swap(n, m);
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        grid[i][j] = ngrid[i][j];
      }
    }
  }
  if (grid[0][0] == 'x') {
    dp[0][0][0][0][0] = 1;
  } else {
    dp[0][0][0][0][1] = 1;
    dp[0][0][1][1][0] = 1;
  }
  for (int i = 0; i < n; i++) {
    if (i > 0) {
      for (int j = 0; j < m; j++) {
        for (int mask = 0; mask < 1 << m; mask++) {
          for (int a = 0; a < 2; a++) {
            for (int b = 0; b < 2; b++) {
              dp[i & 1][j][mask][a][b] = 0;
            }
          }
        }
      }
    }
    for (int j = 0; j < m; j++) {
      if (i == 0 && j == 0) continue;
      for (int mask = 0; mask < 1 << m; mask++) {
        for (int a = 0; a < 2; a++) {
          for (int b = 0; b < 2; b++) {
            if (grid[i][j] != 'x') {
              if (a == 1) {
                if (mask & (1 << j)) {
                  if (j == 0) {
                    add(dp[i & 1][j][mask][0][b],
                        dp[1 - (i & 1)][m - 1][mask][a][b]);
                    add(dp[i & 1][j][mask][1][b],
                        dp[1 - (i & 1)][m - 1][mask][a][b]);
                  } else {
                    add(dp[i & 1][j][mask][a][b],
                        2 * dp[i & 1][j - 1][mask][a][b]);
                  }
                } else {
                  if (j == 0) {
                    if (b == 0) {
                      add(dp[i & 1][j][mask][0][b + 1],
                          dp[1 - (i & 1)][m - 1][mask][a][b]);
                    }
                    add(dp[i & 1][j][mask | (1 << j)][a][b],
                        dp[1 - (i & 1)][m - 1][mask][a][b]);
                  } else {
                    add(dp[i & 1][j][mask | (1 << j)][a][b],
                        dp[i & 1][j - 1][mask][a][b]);
                    add(dp[i & 1][j][mask][a][b], dp[i & 1][j - 1][mask][a][b]);
                  }
                }
              } else {
                if (mask & (1 << j)) {
                  if (j == 0) {
                    add(dp[i & 1][j][mask][1][b],
                        dp[1 - (i & 1)][m - 1][mask][a][b]);
                    add(dp[i & 1][j][mask][a][b],
                        dp[1 - (i & 1)][m - 1][mask][a][b]);
                  } else {
                    add(dp[i & 1][j][mask][1][b], dp[i & 1][j - 1][mask][a][b]);
                    add(dp[i & 1][j][mask][a][b], dp[i & 1][j - 1][mask][a][b]);
                  }
                } else {
                  if (j == 0) {
                    if (b == 0) {
                      add(dp[i & 1][j][mask][a][b + 1],
                          dp[1 - (i & 1)][m - 1][mask][a][b]);
                    }
                    add(dp[i & 1][j][mask | (1 << j)][1][b],
                        dp[1 - (i & 1)][m - 1][mask][a][b]);
                  } else {
                    if (b == 0) {
                      add(dp[i & 1][j][mask][a][b + 1],
                          dp[i & 1][j - 1][mask][a][b]);
                    }
                    add(dp[i & 1][j][mask | (1 << j)][1][b],
                        dp[i & 1][j - 1][mask][a][b]);
                  }
                }
              }
            } else {
              if (j == 0) {
                add(dp[i & 1][j][mask & (~(1 << j))][0][b],
                    dp[1 - (i & 1)][m - 1][mask][a][b]);
              } else {
                add(dp[i & 1][j][mask & (~(1 << j))][0][b],
                    dp[i & 1][j - 1][mask][a][b]);
              }
            }
          }
        }
      }
    }
  }
  long long ans = 0;
  for (int mask = 0; mask < 1 << m; mask++) {
    for (int a = 0; a < 2; a++) {
      for (int b = 0; b < 2; b++) {
        add(ans, dp[(n - 1) & 1][m - 1][mask][a][b]);
      }
    }
  }
  printf("%lld\n", ans);
  return 0;
}
