#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<algorithm>
#include<cmath>
#define ll long long
#define mod 1000000007ll
#define N 100009
#define inf 1000000000ll;
using namespace std;
typedef pair<int,int> II;
int dx[]={0,0,-1,-1,1,1},
 dy[]={-1,1,0,-1,0,1};
int n;
char s[100][100];
int d[100][100][1<<4],in[100][100][1<<4];
queue<int> Q;
int get(char c){
 if(c=='.') return 0;
 return 1<<(c-'A');
}
void update(int x,int y,int z,int v){
 if(d[x][y][z]==-1||d[x][y][z]>v){
 d[x][y][z]=v; 
 if(!in[x][y][z]) in[x][y][z]=1,Q.push(x*1600+y*16+z);
 }
}
int main(){
 while(scanf("%d",&n),n)
 {
 memset(s,0,sizeof(s));
 memset(d,-1,sizeof(d));
 memset(in,0,sizeof(in));
 while(!Q.empty()) Q.pop();
 char c;
 for(int i=1;i<=n;i++)
 for(int j=1;j<n+i;j++){
 while(!isalpha(c=getchar())&&c!='.');
 s[i][j]=c;
 } 
 for(int i=2;i<=n;i++)
 for(int j=1;j<=2*n-i;j++){
 while(!isalpha(c=getchar())&&c!='.');
 s[n+i-1][i+j-1]=c;
 } 
 n=2*n-1;
 for(int i=1;i<=n;i++)
 for(int j=1;j<=n;j++)
 if(isalpha(s[i][j]))
 update(i,j,get(s[i][j]),0);
 int x,y,z,tx,ty,tz;
 while(!Q.empty()){
 x=Q.front()/1600;
 y=(Q.front()%1600)/16;
 z=Q.front()%16;
 in[x][y][z]=0;
 Q.pop();
 for(int i=0;i<6;i++){
 tx=x+dx[i];
 ty=y+dy[i];
 if(!s[tx][ty]) continue;
 tz=z|get(s[tx][ty]);
 update(tx,ty,tz,d[x][y][z]+(s[tx][ty]=='.'));
 }
 int t=15-z;
 for(int i=t;i;i=(i-1)&t)
 if(d[x][y][i]!=-1)
 update(x,y,z|i,d[x][y][i]+d[x][y][z]-(s[x][y]=='.'));
 }
 int ans=n*n;
 for(int i=1;i<=n;i++)
 for(int j=1;j<=n;j++)
 if(s[i][j]&&d[i][j][15]!=-1)
 ans=min(ans,d[i][j][15]);
 printf("You have to buy %d parcels.\n",ans);
 }
}