#include <bits/stdc++.h>
using namespace std;
struct step {
  pair<int, int> p;
  int t;
};
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
pair<int, int> func(string str) {
  if (str == "A") {
    return pair<int, int>(0, 0);
  } else if (str == "B") {
    return pair<int, int>(0, 1);
  } else if (str == "C") {
    return pair<int, int>(0, 2);
  } else if (str == "D") {
    return pair<int, int>(1, 0);
  } else if (str == "E") {
    return pair<int, int>(1, 1);
  } else if (str == "F") {
    return pair<int, int>(1, 2);
  } else if (str == "G") {
    return pair<int, int>(2, 0);
  } else if (str == "H") {
    return pair<int, int>(2, 1);
  } else {
    return pair<int, int>(2, 2);
  }
}
double bfs(int a[3][3], pair<int, int> st, int n) {
  double rate = 0.0;
  queue<step> que;
  step s, tmp;
  s.p = st;
  s.t = 0;
  que.push(s);
  while (1) {
    s = que.front();
    if (s.t == n) {
      break;
    }
    que.pop();
    for (int i = 0; i < 4; i++) {
      int y = s.p.first + dy[i], x = s.p.second + dx[i];
      if (0 <= x && x < 3 && 0 <= y && y < 3) {
        if (a[y][x] == 2) {
          y = s.p.first;
          x = s.p.second;
        }
        tmp.p = pair<int, int>(y, x);
        tmp.t = s.t + 1;
        que.push(tmp);
      }
    }
  }
  while (!que.empty()) {
    s = que.front();
    que.pop();
    if (a[s.p.first][s.p.second] == 1) {
      rate += 1.0;
    }
  }
  return rate / (1 << (2 * n));
}
int main() {
  int n, a[3][3];
  string s, t, u;
  pair<int, int> p;
  while (1) {
    cin >> n;
    if (n == 0) {
      break;
    }
    cin >> s >> t >> u;
    fill(&a[0][0], &a[2][2], 0);
    p = func(t);
    a[p.first][p.second] = 1;
    p = func(u);
    a[p.first][p.second] = 2;
    printf("%.8f\n", bfs(a, func(s), n));
  }
  return 0;
}
