#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

typedef std::pair<int, double> Result;
std::vector<Result> endings;

void addResult(const Result& result){
    if (std::find(endings.begin(), endings.end(), result) == endings.end()){
        endings.push_back(result);
    }
}

bool customLess(const Result& a, const Result& b)
{
    return (a.first != b.first) ? a.first < b.first : a.second < b.second;
}

void turn(int n, char pawn_x, char pawn_y, char pony_x, char pony_y){
    //printf("%d %c%c-%c%c\n", n, pawn_x, pawn_y, pony_x, pony_y);

    //если ходит пешка(белые)
    if (n % 2 != 0){

        //если пешка дошла в ферзи
        if (pawn_y == '8'){
            //если на следующем ходу ферзя может побить конь
            if (((pony_y == '7') && ((pawn_x - 2) == pony_x)) ||
                ((pony_y == '7') && ((pawn_x + 2) == pony_x)) ||
                ((pony_y == '6') && ((pawn_x - 1) == pony_x)) ||
                ((pony_y == '6') && ((pawn_x + 1) == pony_x)))
            {
                //то победа негров
                addResult(Result(n, -1));
            }
            else {
                //иначе победа белых
                addResult(Result(n, 1));
            }
        }


        //если пешка может побить пони на текущем ходу
        else if ((pawn_y+1 == pony_y) && ((pawn_x+1 == pony_x) || (pawn_x-1 == pony_x))){
            //победа белых
            addResult(Result(n, 1));
        }

        //если пешке преграждает путь пони
        else if ((pawn_x == pony_x) && (pawn_y+1 == pony_y)){
            //то ничья
            addResult(Result(n, 0.5));
        }

        //иначе просто ходим пешкой
        else {
            //если стоит на второй клетке и ничто не мешает прыгнуть на 2
            if (pawn_y == '2' && !(pony_y == '4' && pony_x == pawn_x)){
                turn(n + 1, pawn_x, pawn_y + 2, pony_x, pony_y);
            }
            turn(n + 1, pawn_x, pawn_y + 1, pony_x, pony_y);
        }
    }

    //если ходит пони(черные)
    else {
        char pony_turns[8][2] = {
            {(char)(pony_x-1), (char)(pony_y-2)},
            {(char)(pony_x-2), (char)(pony_y-1)},
            {(char)(pony_x-1), (char)(pony_y+2)},
            {(char)(pony_x-2), (char)(pony_y+1)},
            {(char)(pony_x+1), (char)(pony_y+2)},
            {(char)(pony_x+2), (char)(pony_y+1)},
            {(char)(pony_x+1), (char)(pony_y-2)},
            {(char)(pony_x+2), (char)(pony_y-1)}
        };

        for (int i=0; i<8; ++i){
            //если конь может побить пешку
            if ((pony_turns[i][0] == pawn_x) && (pony_turns[i][1] == pawn_y)){
                addResult(Result(n, -1));
            }
            // а если не может, но ход в пределах шахматной доски
            else if ((pony_turns[i][0] <= 'h') && (pony_turns[i][0] >= 'a') && (pony_turns[i][1] <= '8') && (pony_turns[i][1] >= '1')){
                //то пусть сцуко ходит
                turn(n + 1, pawn_x, pawn_y, pony_turns[i][0], pony_turns[i][1]);
            }
        }
    }
}

int main()
{
    string pawn;
    string pony;

    cin >> pawn;
    cin >> pony;


    turn(1, pawn[0], pawn[1], pony[0], pony[1]);
    std::sort(endings.begin(), endings.end(), customLess);



    /*for (const Result &r: endings){
        cout << r.first << ' ' << r.second << endl;
    }*/


    cout << endings.front().second << endl;

    return 0;
}

