#include <bits/stdc++.h>
using namespace std;
const int MOD = (int)1e9 + 7;
char s[3][10010];
int ban[10010];
long long dp[10010][8][2];
int get_bit(int x, int v) { return (x >> v) & 1; }
void add(long long &x, long long v) {
  x += v;
  x %= MOD;
  if (x < 0) x += MOD;
}
int main() {
  int(n);
  scanf("%d", &n);
  for (int i = 0; i < (3); ++i) scanf("%s", s[i] + 1);
  for (int i = 0; i < (3); ++i)
    for (int j = 0; j < (n); ++j)
      if (s[i][j + 1] != '.') ban[j + 1] |= 1 << i;
  dp[0][7][0] = 1;
  for (int i = (1); i < (n + 1); ++i) {
    for (int j = 0; j < (8); ++j) {
      if (!dp[i - 1][j]) continue;
      bool no = false;
      int tmp = ban[i], oo = 0;
      for (int k = 0; k < (3); ++k) {
        if (!get_bit(j, k)) {
          if (get_bit(ban[i], k))
            no = true;
          else {
            tmp |= 1 << k;
            if (s[k][i + 1] == 'O' || s[k][i - 2] == 'O') oo = 1;
          }
        }
      }
      if (no) continue;
      switch (tmp) {
        case 0:
          for (int k = 0; k < (2); ++k) {
            add(dp[i][0][k | oo], dp[i - 1][j][k]);
            add(dp[i][3][k | oo], dp[i - 1][j][k]);
            add(dp[i][6][k | oo], dp[i - 1][j][k]);
          }
          break;
        case 1:
          for (int k = 0; k < (2); ++k) {
            add(dp[i][1][k | oo], dp[i - 1][j][k]);
            if (s[0][i] == 'O')
              add(dp[i][7][1], dp[i - 1][j][k]);
            else
              add(dp[i][7][k | oo], dp[i - 1][j][k]);
          }
          break;
        case 2:
          for (int k = 0; k < (2); ++k) {
            add(dp[i][2][k | oo], dp[i - 1][j][k]);
          }
          break;
        case 3:
          for (int k = 0; k < (2); ++k) {
            add(dp[i][3][k | oo], dp[i - 1][j][k]);
          }
          break;
        case 4:
          for (int k = 0; k < (2); ++k) {
            add(dp[i][4][k | oo], dp[i - 1][j][k]);
            if (s[2][i] == 'O')
              add(dp[i][7][1], dp[i - 1][j][k]);
            else
              add(dp[i][7][k | oo], dp[i - 1][j][k]);
          }
          break;
        case 5:
          for (int k = 0; k < (2); ++k) {
            add(dp[i][5][k | oo], dp[i - 1][j][k]);
          }
          break;
        case 6:
          for (int k = 0; k < (2); ++k) {
            add(dp[i][6][k | oo], dp[i - 1][j][k]);
          }
          break;
        case 7:
          for (int k = 0; k < (2); ++k) {
            add(dp[i][7][k | oo], dp[i - 1][j][k]);
          }
          break;
      }
    }
  }
  cout << dp[n][7][1] << endl;
  return 0;
}
