#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

int n;
char s,t,b;

double calc(){

	char floar[3][3];
	floar[0][0] = 'A';
	floar[0][1] = 'B';
	floar[0][2] = 'C';
	floar[1][0] = 'D';
	floar[1][1] = 'E';
	floar[1][2] = 'F';
	floar[2][0] = 'G';
	floar[2][1] = 'H';
	floar[2][2] = 'I';

	pair<int,int> startPlace;
	pair<int,int> finPlace;
	pair<int,int> wareHouse;

	for(int i = 0; i < 3; i++){
		for(int j = 0; j < 3; j++){
			if(floar[i][j] == s){
				startPlace.first = i;
				startPlace.second = j;
			}
			else if(floar[i][j] == t){
				finPlace.first = i;
				finPlace.second = j;
			}
			else if(floar[i][j] == b){
				wareHouse.first = i;
				wareHouse.second = j;
			}
		}
	}

	vector<pair<int,int>> placeList;
	vector<pair<int,int>> nextPlaceList;

	placeList.push_back(startPlace);
	int leaveBattery = n;
	pair<int,int> newPlace;

	int trueCount = 0;
	int falseCount = 0;
	while(placeList.size()){
		// àµobe[ª0ÆÈÁ½ç
		if(leaveBattery == 0){
			// »ÝÊuªobeÌêÌ¨ð¦é
			for(int i = 0; i < placeList.size(); i++){
				if(placeList[i].first == finPlace.first && placeList[i].second == finPlace.second){
					trueCount++;
				}
			}
			break;
		}else if(leaveBattery == 1){
			falseCount = placeList.size() * 4;
		}
		for(int i = 0; i < placeList.size(); i++){
			// ãAºA¶AEÉÍÝoµÄ¢È¢êA©ÂqÉÅÈ¢ê»ÌûüÉÚ®
			if(placeList[i].first - 1 >= 0){
				if(wareHouse.first != placeList[i].first - 1 || wareHouse.second != placeList[i].second){
					newPlace.first = placeList[i].first - 1;
					newPlace.second = placeList[i].second;
					nextPlaceList.push_back(newPlace);
				}
				else{
					nextPlaceList.push_back(placeList[i]);
				}
			}
			if(placeList[i].first + 1 < 3){
				if(wareHouse.first != placeList[i].first + 1 || wareHouse.second != placeList[i].second){
					newPlace.first = placeList[i].first + 1;
					newPlace.second = placeList[i].second;
					nextPlaceList.push_back(newPlace);	
				}
				else{
					nextPlaceList.push_back(placeList[i]);
				}
			}
			if(placeList[i].second - 1 >= 0){
				if(wareHouse.first != placeList[i].first || wareHouse.second != placeList[i].second - 1){
					newPlace.first = placeList[i].first;
					newPlace.second = placeList[i].second - 1;
					nextPlaceList.push_back(newPlace);	
				}
				else{
					nextPlaceList.push_back(placeList[i]);
				}
			}
			if(placeList[i].second + 1 < 3){
				if(wareHouse.first != placeList[i].first || wareHouse.second != placeList[i].second + 1){
					newPlace.first = placeList[i].first;
					newPlace.second = placeList[i].second + 1;
					nextPlaceList.push_back(newPlace);	
				}
				else{
					nextPlaceList.push_back(placeList[i]);
				}
			}
		}
		leaveBattery--;
		placeList = nextPlaceList;
		nextPlaceList.clear();
	}
	return (double)trueCount/falseCount;
}

void solve(){
	//ifstream ifs("prob1020.txt");
	while(1){
		//ifs >> n;
		cin >> n;

		if(n == 0)
			break;
		cin >> s;
		cin >> t;
		cin >> b;
		//ifs >> s;
		//ifs >> t;
		//ifs >> b;
		cout << calc() << endl;
	}
}

int main(){
solve():
return 0;
}