import java.io.*;
import java.util.*;

public class Q5 {
	static char[][] maze;
	static int rm,cm;
	public static void main(String[] args) throws IOException {
		Scanner a = new Scanner(new File("DATA5.txt"));
		PrintStream o = new PrintStream(new File("OUT5.txt"));
		maze = new char[10][10];
		boolean[][] visited = new boolean[10][10];
		rm = 0;
		cm = 0;
		String in = "";
		for(int i = 0; i < 10; i++) {
			in = a.nextLine();
			for(int j = 0; j < 10; j++) {
				maze[i][j] = in.charAt(j);
				visited[i][j] = false;
				if(in.charAt(j) == "A".charAt(0)) {
					rm = i;
					cm = j;
				}
			}
		}
		for(int i = 0; i < 10; i++) {
			for(int j = 0; j < 10; j++) {
				System.out.print(maze[i][j]);
			}
			System.out.println();
		}
		
		for(int i = (int)("B".charAt(0)); i <= (int)("F".charAt(0)); i++) {
			visited = new boolean[10][10];
			visited[rm][cm] = true;
			int sPath = getPath(rm,cm,0,(char)i, visited);
			o.println(sPath);
		}
		
		a.close();
		o.close();
		System.exit(0);
	}
	
	public static int getPath(int r, int c, int moves, char target, boolean[][] visited) {
		boolean[][] fVisited;
		int left;
		int right;
		int up;
		int down;
		//System.out.println("Moves: " + moves + " Pos: " + r + "," + c + " Target: " + target);
		if(maze[r][c] == target) {
			rm = r;
			cm = c;
			//System.out.println("Hit target after " + moves);
			return moves;
		}
		left = 9999999;
		fVisited = (boolean[][])visited.clone();
		for(int i = 1; i <= c; i++) {
			if(maze[r][c-i] == "#".charAt(0)) {
				if(!visited[r][c-i+1]) {
					fVisited[r][c-i+1] = true;
					left = getPath(r,c-i+1,moves+i-1,target, fVisited);
				}
				i = 999;
			}
			if(i == c) {
				if(!visited[r][c-i]) {
					fVisited[r][c-i] = true;
					left = getPath(r,c-i,moves+i,target, fVisited);
				}
			}
		}
		right = 999999;
		fVisited = (boolean[][])visited.clone();
		for(int i = 1; i <= 9-c; i++) {
			if(maze[r][c+i] == "#".charAt(0)) {
				if(!visited[r][c+i-1]) {
					fVisited[r][c+i-1] = true;
					right = getPath(r,c+i-1,moves+i-1,target, fVisited);
				}
				i = 999;
			}
			if(i == 9-c) {	
				if(!visited[r][c+i]) {
					fVisited[r][c+i] = true;
					right = getPath(r,c+i,moves+i,target, fVisited);
				}
			}
		}
		up = 99999999;
		fVisited = (boolean[][])visited.clone();
		for(int i = 1; i <= r; i++) {
			if(maze[r-i][c] == "#".charAt(0)) {
				if(!visited[r-i+1][c]) {
					fVisited[r-i+1][c] = true;
					up = getPath(r-i+1,c,moves+i-1,target, fVisited);
				}
				i = 999;
			}
			if(i == r) {
				if(!visited[r-i][c]) {
					fVisited[r-i][c] = true;
					up = getPath(r-i,c,moves+i,target, fVisited);
				}
			}
		}
		down = 99999999; 
		fVisited = (boolean[][])visited.clone();
		for(int i = 1; i <= 9-r; i++) {
			if(maze[r+i][c] == "#".charAt(0)) {
				if(!visited[r+i-1][c]) {
					fVisited[r+i-1][c] = true;
					down = getPath(r+i-1,c,moves+i-1,target, fVisited);
				}
				i = 999;
			}
			if(i == 9-r) {
				if(!visited[r+i][c]) {
					fVisited[r+i][c] = true;
					down = getPath(r+i,c,moves+i,target, fVisited);					
				}
			}
		}
		return Math.min(Math.min(up,down),Math.min(left,right));
		//return up;
	}
}
