import java.awt.Point;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.HashMap;
import java.util.Scanner;


public class Question5 {

	static HashMap<Character, Point> points;
	static Character[] chars = new Character[] {'A', 'B', 'C', 'D', 'E', 'F'};
	static Character[][] tiles;
	static boolean[][] crumbs;
	public static void main(String[] args) throws Exception {
		BufferedWriter fileout = new BufferedWriter(new FileWriter("OUT5.txt"));
		Scanner scan = new Scanner(new FileReader("DATA5.txt"));
		tiles = new Character[10][10];
		crumbs = new boolean[10][10];
		points = new HashMap<Character, Point>();
		int y = 0;
		while (scan.hasNextLine() && y < 10) {
			String line = scan.nextLine();
			for (int x = 0; x < 10; x++) {
				char ch = line.charAt(x);
				if (Character.isLetter(ch)) {
					points.put(ch, new Point(x, y));
					tiles[x][y] = '.';
				} else {
					tiles[x][y] = ch;
				}
			}
			y++;
		}
		for (int i = 0; i < 5; i++) {
			Point start = points.get(chars[i]);
			look = points.get(chars[i + 1]);
			fileout.write(String.valueOf(recurse(new RecurseInfo(start.x, start.y, -1, 0))));
			fileout.newLine();
		}
		fileout.close();
	}
	
	public static RecurseInfo getSlide(int x, int y, int direction, int distance) {
		RecurseInfo last = new RecurseInfo(x, y, direction, distance - 1);
		int tx = x;
		int ty = y;
		while (true) {
			if (tx < 0 || tx >= 10 || ty < 0 || ty >= 10 || tiles[tx][ty] != '.') break;
			last.x = tx;
			last.y = ty;
			last.distance++;
			if (direction == 0) {
				ty--;
			} else if (direction == 1) {
				tx++;
			} else if (direction == 2) {
				ty++;
			} else if (direction == 3) {
				tx--;
			}
		}
		return last.distance == distance ? null : last;
	}
	
	static Point look;
	public static int recurse(RecurseInfo info) {
		if (info == null || info.x < 0 || info.x >= 10 || info.y < 0 || info.y >= 10) return 1001;
		if (tiles[info.x][info.y] != '.') {
			return 1001;
		} else if (info.x == look.x && info.y == look.y) {
			return info.distance;
		} else if (crumbs[info.x][info.y]) {
			return 1001;
		}
		crumbs[info.x][info.y] = true;
		int answer = 1001;
		/*for (int y = 0; y < 10; y++) {
			for (int x = 0; x < 9; x++) {
				System.out.print(crumbs[x][y] ? ',' : tiles[x][y]);
			}
			System.out.println(crumbs[9][y] ? ',' : tiles[9][y]);
		}
		System.out.println("------");*/
		for (int dir = info.direction == -1 ? info.direction : info.direction + 1; dir < info.direction + 4; dir++) {
			answer = Math.min(answer, recurse(getSlide(info.x, info.y, dir & 3, info.distance)));
		}
		crumbs[info.x][info.y] = false;
		return answer;
	}
	
	public static class RecurseInfo extends Point {
		private static final long serialVersionUID = 1L;
		int direction;
		int distance;
		
		public RecurseInfo(int x, int y, int direction, int distance) {
			super(x, y);
			this.direction = direction;
			this.distance = distance;
		}
		
	}

}
