#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <functional>
#include <list>
#include <cstdio>
#include <cmath>
#include <cstdlib>

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<string> vs;
typedef pair<int,int> pii;
#define bpc __builtin_popcount

struct state
{
	int x,y,z;
};

int dx[6] = {0,0,0,0,1,-1};
int dy[6] = {1,-1,0,0,0,0};
int dz[6] = {0,0,1,-1,0,0};

int main()
{
	freopen("DATA5.txt", "r", stdin);
	freopen("OUT5.txt", "w", stdout);
	
	for (int T = 0; T < 5; T++)
	{
		int N; cin >> N;
		queue<state> bfs;

		char grid[20][20][20];
		int dist[20][20][20];
		memset(dist, -1, sizeof(dist));
		
		for (int i = 0; i < N; i++)
			for (int j = 0; j < N; j++)
				for (int k = 0; k < N; k++) {
					cin >> grid[i][j][k];
					if (grid[i][j][k] == 'A') {
						bfs.push((state){i,j,k});
						dist[i][j][k] = 0;
					}
				}
		
		while (bfs.size())
		{
			state X = bfs.front(); bfs.pop();
			int x = X.x, y = X.y, z = X.z;
			if (grid[x][y][z] == 'B') {
				cout << dist[x][y][z] << endl;
				break;
			}
			
			int d = dist[x][y][z];
			for (int i = 0; i < 6; i++)
			{
				unsigned nx = x + dx[i], ny = y + dy[i], nz = z + dz[i];
				if (nx < N && ny < N && nz < N && grid[nx][ny][nz] != '#' && dist[nx][ny][nz] == -1)
				{
					dist[nx][ny][nz] = d+1;
					bfs.push((state){nx,ny,nz});
				}
			}
		}
	}
}
