// Abhimat Krishna Gautam

// Barrington High School

// Senior Division

// Reversi

// April 2, 2008

import java.util.*;

 

public class ACSL40809

{

            private static int grid[][];

           

            public static void main(String[] args)

            {

                        System.out.println("ACSL40809\tReversi\tAbhimat K Gautam");

                        for(int run = 1; run <= 5; run++){

                                    // Input

                                    System.out.println("Input " + run + ":");

                                    Scanner in = new Scanner(System.in);

                                   

                                    grid = new int[8][8];

                                    //Initializing grid

                                    for(int x = 0; x < 8; x++)

                                    {

                                                for(int y = 0; y < 8; y++)

                                                {

                                                            grid[x][y] = 0;

                                                }

                                    }

                                   

                                    grid[4][3] = grid[3][4] = 1;      // X = 1

                                    grid[3][3] = grid[4][4] = 2;      // O = 2

                                   

                                    String yAlphabet = "ABCDEFGH";

                                   

                                    int totalFlips = 0;

                                    int moveNum = 0;

                                   

                                    String curMove = in.next();

                                    while(!curMove.equals("##"))

                                    {

                                                int xCoord = Integer.parseInt(curMove.substring(0, 1)) - 1;

                                                int yCoord = yAlphabet.indexOf(curMove.substring(1, 2));

                                               

                                                grid[xCoord][yCoord] = moveNum%2 + 1;

                                                                                   

                                                Coordinate origPiece = new Coordinate(xCoord, yCoord);

                                               

                                                for(int x = -1; x <= 1; x++)

                                                {

                                                            for(int y = -1; y <= 1; y++)

                                                            {

                                                                        if(x==0 && y==0)

                                                                                    continue;

                                                                        Coordinate move = new Coordinate(xCoord + x, yCoord + y);

                                                                        Coordinate target = getCoord(origPiece, move);

                                                                       

                                                                        if(target != null)

                                                                        {

                                                                                    totalFlips += countFlips(origPiece, move, target, 0);

                                                                        }

                                                            }

                                                }

                                                fixGrid();

                                               

                                                moveNum++;

                                                curMove = in.next();

                                    }

                                   

                                    // Output

                                    System.out.println("Output " + run + ":\n" + totalFlips + "\n");

                        }

            }

           

            public static Coordinate getCoord(Coordinate origC, Coordinate newC)

            {

                        //Tests to see if new coordinate is empty or out of bounds

                        if(newC.getX() < 0 || newC.getY() < 0 || newC.getX() > 7 || newC.getY() > 7 || grid[newC.getX()][newC.getY()] == 0)

                                    return null;

                        else if(grid[newC.getX()][newC.getY()] == grid[origC.getX()][origC.getY()])

                                    return newC;

                        else

                        {

                                    Coordinate newerC = new Coordinate(newC);

                                    if(origC.getX() - newC.getX() > 0)

                                                newerC.setX(newC.getX() - 1);

                                    else if(origC.getX() - newC.getX() < 0)

                                                newerC.setX(newC.getX() + 1);

                                    if(origC.getY() - newC.getY() > 0)

                                                newerC.setY(newC.getY() - 1);

                                    else if(origC.getY() - newC.getY() < 0)

                                                newerC.setY(newC.getY() + 1);

                                   

                                    return getCoord(origC, newerC);

                        }

            }

           

            public static int countFlips(Coordinate origC, Coordinate newC, Coordinate target, int flips)

            {

                        if(newC.equals(target))

                                    return flips;

                       

                        Coordinate newerC = new Coordinate(newC);

                        if(origC.getX() - newC.getX() > 0)

                                    newerC.setX(newC.getX() - 1);

                        else if(origC.getX() - newC.getX() < 0)

                                    newerC.setX(newC.getX() + 1);

                        if(origC.getY() - newC.getY() > 0)

                                    newerC.setY(newC.getY() - 1);

                        else if(origC.getY() - newC.getY() < 0)

                                    newerC.setY(newC.getY() + 1);

                       

                        if(grid[newC.getX()][newC.getY()] == grid[origC.getX()][origC.getY()] % 2 + 1)

                        {

                                    grid[newC.getX()][newC.getY()] = 10 * grid[origC.getX()][origC.getY()];

                                    return countFlips(origC, newerC, target, flips + 1);

                        }

                        else

                                    return countFlips(origC, newerC, target, flips);

            }

           

            public static void fixGrid()

            {

                        for(int x = 0; x < 8; x++)

                        {

                                    for(int y = 0; y < 8; y++)

                                    {

                                                if(grid[x][y] == 10)

                                                            grid[x][y] = 1;

                                                else if(grid[x][y] == 20)

                                                            grid[x][y] = 2;

                                    }

                        }

            }

           

            public static void displayGrid()

            {

                        for(int y = 0; y < 8; y++)

                        {

                                    for(int x = 0; x < 8; x++)

                                    {

                                                System.out.print(grid[x][y] + " ");

                                    }

                                    System.out.println("\n");

                        }

            }

}

class Coordinate

{

            private int x, y;

           

            public Coordinate()

            {

                        x = 0;

                        y = 0;

            }

            public Coordinate(int nX, int nY)

            {

                        x = nX;

                        y = nY;

            }

            public Coordinate(Coordinate newC)

            {

                        x = newC.getX();

                        y = newC.getY();

            }

            public int getX()

            {

                        return x;

            }

            public int getY()

            {

                        return y;

            }

            public void setX(int nX)

            {

                        x = nX;

            }

            public void setY(int nY)

            {

                        y = nY;

            }

            public boolean equals(Coordinate otherC)

            {

                        return (otherC.getX() == x) && (otherC.getY() == y);

            }

}