import java.awt.Point;
import java.io.*;
import java.util.LinkedList;
public class s5 {
	static char maze [][] = new char[10][10];
	static int targetx;
	static int targety;
	static int bestDistance;
	public static void main(String[] args)throws IOException {
		BufferedReader r = new BufferedReader(new FileReader("Data5.txt"));
		PrintWriter p = new PrintWriter(new File("Out5.txt"));
		int x[] = new int[6];
		int y[] = new int[6];
		for(int i = 0 ;  i < 10; i++){
			String temp = r.readLine();
			for(int j = 0 ; j < 10; j++){
				maze[i][j] = temp.charAt(j);
				if(Character.isUpperCase(maze[i][j])){
					x[maze[i][j] - 'A'] = i;
					y[maze[i][j] - 'A'] = j;
					maze[i][j] = '.';
				}
			}
		}
		for(int i = 0 ;i<5; i++){
			targetx = x[i+1];
			targety = y[i+1];
			bestDistance = Integer.MAX_VALUE;
			recurse(x[i],y[i], -1);
			p.println(bestDistance);
		}
		p.close();
		r.close();
	}

	public static void recurse(int currentx, int currenty, int currentDistance){
		if(currentDistance>20){
			return;
		}
		if(currentx == targetx &&  currenty == targety){
			if(currentDistance< bestDistance){
				bestDistance = currentDistance;
			}
		}

		if(currentx+1 != 10){ /// IF there is not a block directly in this direction
			if(maze[currentx+1] [currenty] != '#'){
				for(int i = 1 ; true; i++){ // Go right
					if(currentx+i==10||maze[currentx+i][currenty] =='#'){
						recurse(currentx+i-1,currenty, currentDistance+i);
						break;
					}
				}
			}
		}
		if(currentx-1 !=-1){ /// IF there is not a block directly in this direction
			if(maze[currentx-1][currenty] != '#'){
				for(int i = 1 ; true; i++){ // Go left
					if(currentx-i ==-1 ||maze[currentx-i][currenty] =='#' ){
						recurse(currentx-i+1,currenty, currentDistance+i);
						break;
					}
				}
			}
		}
		if(currenty+1 != 10){ /// IF there is not a block directly in this direction
			if( maze[currentx][currenty+1] != '#')
				for(int i = 1 ; true; i++){ // Go down
					if( currenty+i ==10  || maze[currentx][currenty+i] =='#' ){
						recurse(currentx,currenty +i -1, currentDistance+i);
						break;
					}
				}
		}

		if(currenty-1 !=-1){ /// IF there is not a block directly in this direction
			if(maze[currentx][currenty-1] != '#'){
				for(int i = 1 ; true; i++){ // Go up
					if(currenty-i == -1 ||maze[currentx][currenty-i] =='#'){
						recurse(currentx,currenty-i+1, currentDistance+i);
						break;
					}
				}
			}
		}
	}
}

