#include <bits/stdc++.h>
using namespace std;
double pos = 0;
struct Q {
  int i, j;
};
bool operator==(const Q &q1, const Q &q2) {
  return (q1.i == q2.i) && (q1.j == q2.j);
}
bool vis[3][3];
void search(Q st, Q ba, Q ju, double p, int val) {
  if (st == ba) {
    pos += p;
    return;
  }
  if (val == 0) return;
  vis[st.i][st.j] = true;
  if ((st.j - 1 >= 0) && (st.j - 1 != ju.j || st.i != ju.i)) {
    Q tt = st;
    tt.j--;
    if (!vis[tt.i][tt.j]) search(tt, ba, ju, p * 0.25, val - 1);
  } else
    search(st, ba, ju, p * 0.25, val - 1);
  if (st.j + 1 <= 2 && (st.j + 1 != ju.j || st.i != ju.i)) {
    Q tt = st;
    tt.j++;
    if (!vis[tt.i][tt.j]) search(tt, ba, ju, p * 0.25, val - 1);
  } else
    search(st, ba, ju, p * 0.25, val - 1);
  if (st.i - 1 >= 0 && (st.j != ju.j || st.i - 1 != ju.i)) {
    Q tt = st;
    tt.i--;
    if (!vis[tt.i][tt.j]) search(tt, ba, ju, p * 0.25, val - 1);
  } else
    search(st, ba, ju, p * 0.25, val - 1);
  if (st.i + 1 <= 2 && (st.j != ju.j || st.i + 1 != ju.i)) {
    Q tt = st;
    tt.i++;
    if (!vis[tt.i][tt.j]) search(tt, ba, ju, p * 0.25, val - 1);
  } else
    search(st, ba, ju, p * 0.25, val - 1);
}
int main() {
  int val;
  while (scanf("%d\n", &val) != EOF && val != 0) {
    memset(vis, false, sizeof(vis));
    pos = 0;
    string tmp;
    getline(cin, tmp);
    Q st, ba, ju;
    st.i = (tmp[0] - 'A') / 3;
    st.j = (tmp[0] - 'A') % 3;
    ba.i = (tmp[2] - 'A') / 3;
    ba.j = (tmp[2] - 'A') % 3;
    ju.i = (tmp[4] - 'A') / 3;
    ju.j = (tmp[4] - 'A') % 3;
    double p = 1;
    search(st, ba, ju, p, val);
    printf("%.9lf\n", pos);
  }
  return 0;
}
