import java.io.*;
import java.util.*;

class ride
{
	static int min = 10000000, n;
	public static void main (String [] args) throws IOException 
	{
   
    	BufferedReader f = new BufferedReader(new FileReader("DATA5.txt"));
    	PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("OUT5.txt")));
							
		while (f.ready())
		{
			min = 10000000;
			n = Integer.parseInt(f.readLine());
			
			char[][][] maze = new char[n][n][n];
			
			for (int i=0; i<n*n; i++)
				maze[i/n][i%n] = f.readLine().toCharArray();
			
			for (int i=0; i<n; i++)
			{
				System.out.println();
				for (int j=0; j<n; j++)
				{
					for(int k=0; k<n; k++)
						System.out.print(maze[i][j][k]);
					System.out.println();
				}
			}
			System.out.println("===============");
			
			boolean[][][] visited = new boolean[n][n][n];
			
			for (int i=0; i<n; i++)
				for (int j=0; j<n; j++)
					for (int k=0; k<n; k++)
						if (maze[i][j][k]=='A')
							recurse(i, j, k, 0, visited, maze);
			
		
			out.println(min);
		}
		
		out.close();
		System.exit(0);
	}
	
	static boolean valid(int i, int j, int k)
	{
		return i>=0 && i<n && j>=0 && j<n && k>=0 && k<n;
	}
	
	static void recurse(int i, int j, int k, int steps, boolean[][][] visited, char[][][] m)
	{	
		if (!valid(i,j,k)) return;
		if (visited[i][j][k]) return;
		if (m[i][j][k]=='#') return;
		if (steps>=min) return;
	
		
		if (m[i][j][k]=='B')
		{
			min = Math.min(min, steps);
			return;
		}
		
		visited[i][j][k] = true;
		recurse(i+1, j, k, steps+1, visited, m);
		recurse(i-1, j, k, steps+1, visited, m);
		recurse(i, j-1, k, steps+1, visited, m);
		recurse(i, j+1, k, steps+1, visited, m);
		recurse(i, j, k+1, steps+1, visited, m);
		recurse(i, j, k-1, steps+1, visited, m);
		visited[i][j][k] = false;
		return;
	}
}
