#include <iostream>
#include <cstdio>
#include <string>
#include <sstream>
#include <vector>
#include <deque>
#include <queue>
#include <map>
#include <set>
#include <cmath>
#include <list>
#include <bitset>
#include <algorithm>
using namespace std;

struct point {
	int x,y,z,p;
};

int main() {
	freopen("DATA5.txt","r",stdin);
	freopen("OUT5.txt","w",stdout);
	char grid[6][6][6];
	int I=5,n,x,y,z;
	point cur,t;
	queue<point> visit;	

	while (I--) {
		while (visit.size())
			visit.pop();
		cin >> n;
		for (z=0;z<n;z++) {
			for (x=0;x<n;x++) {
				for (y=0;y<n;y++) {
					cin >> grid[x][y][z];
					if (grid[x][y][z]=='A') {
						cur.x=x;cur.y=y;cur.z=z;
						cur.p=0;
						visit.push(cur);
					}
				}
			}
		}
		while (visit.size()) {
			cur=visit.front();
			visit.pop();
			if (grid[cur.x][cur.y][cur.z]=='B') {
				cout << cur.p << "\n";
				break;
			}
			grid[cur.x][cur.y][cur.z]='#';
			//up
			if ((cur.y-1>-1)&&(grid[cur.x][cur.y-1][cur.z]!='#')) {
				t=cur;
				t.y--;
				t.p++;
				visit.push(t);
			}
			//down
			if ((cur.y+1<n)&&(grid[cur.x][cur.y+1][cur.z]!='#')) {
				t=cur;
				t.y++;
				t.p++;
				visit.push(t);
			}
			//left
			if ((cur.x-1>-1)&&(grid[cur.x-1][cur.y][cur.z]!='#')) {
				t=cur;
				t.x--;t.p++;
				visit.push(t);
			}
			//right
			if ((cur.x+1<n)&&(grid[cur.x+1][cur.y][cur.z]!='#')) {
				t=cur;
				t.x++;t.p++;
				visit.push(t);
			}
			//in
			if ((cur.z+1<n)&&(grid[cur.x][cur.y][cur.z+1]!='#')) {
				t=cur;
				t.z++;t.p++;
				visit.push(t);
			}
			//out
			if ((cur.z-1>-1)&&(grid[cur.x][cur.y][cur.z-1]!='#')) {
				t=cur;
				t.z--;t.p++;
				visit.push(t);
			}
		}
	}
	return 0;
}

