#include <bits/stdc++.h>
using namespace std;
const int mm = 1000000007;
int n, m, x, y, k, p;
long long ans = 0, f[10100][8];
char a[4][10100];
void init() {
  scanf("%d", &n);
  for (int i = (1); i <= (3); ++i) scanf("%s", a[i] + 1);
  for (int i = (1); i <= (3); ++i)
    for (int j = (1); j <= (n); ++j)
      if (a[i][j] == 'O') {
        x = i;
        y = j;
        break;
      }
}
long long dp() {
  memset(f, 0, sizeof(f));
  f[0][7] = 1;
  for (int i = (1); i <= (n); ++i) {
    m = 0;
    for (int j = (1); j <= (3); ++j)
      if (a[j][i] != '.') m |= 1 << (j - 1);
    for (int j = (0); j <= (7); ++j)
      if ((j & m) == m) {
        (f[i][j] += f[i - 1][7 ^ j | m]) %= mm;
        if (j == 3 && !m) (f[i][j] += f[i - 1][7]) %= mm;
        if (j == 6 && !m) (f[i][j] += f[i - 1][7]) %= mm;
        if (j == 7) {
          if (!(m & 3)) (f[i][j] += f[i - 1][m & 4 | 3]) %= mm;
          if (!(m & 6)) (f[i][j] += f[i - 1][m & 1 | 6]) %= mm;
        }
      }
  }
  return f[n][7];
}
void work() {
  if (x == 1)
    p = 1;
  else if (x == 3)
    p = -1;
  else
    p = 0;
  for (int i = (1); i <= (7); ++i) {
    k = 0;
    if (i & 1)
      if (!(y > 2 && a[x][y - 1] == '.' && a[x][y - 2] == '.'))
        continue;
      else
        k++;
    if (i & 2)
      if (!(y < n - 1 && a[x][y + 1] == '.' && a[x][y + 2] == '.'))
        continue;
      else
        k++;
    if (i & 4)
      if (!(p && a[x + p][y] == '.' && a[x + p + p][y] == '.'))
        continue;
      else
        k++;
    if (i & 1) a[x][y - 1] = a[x][y - 2] = 'X';
    if (i & 2) a[x][y + 1] = a[x][y + 2] = 'X';
    if (i & 4) a[x + p][y] = a[x + p + p][y] = 'X';
    if (k & 1)
      (ans += dp()) %= mm;
    else
      (ans -= dp()) %= mm;
    if (i & 1) a[x][y - 1] = a[x][y - 2] = '.';
    if (i & 2) a[x][y + 1] = a[x][y + 2] = '.';
    if (i & 4) a[x + p][y] = a[x + p + p][y] = '.';
  }
  (ans += mm) %= mm;
  cout << ans;
}
int main() {
  init();
  work();
  return 0;
}
