#include<bits/stdc++.h>
using namespace std;
int n;
vector<pair<int, int>> dir[68];
void init(){
dir['A'].push_back(pair<int, int>(1, 0));
dir['A'].push_back(pair<int, int>(0, 1));
dir['A'].push_back(pair<int, int>(-1, 0));
dir['A'].push_back(pair<int, int>(0, -1));
dir['B'].push_back(pair<int, int>(2, 0));
dir['B'].push_back(pair<int, int>(0, 2));
dir['B'].push_back(pair<int, int>(-2, 0));
dir['B'].push_back(pair<int, int>(0, -2));
dir['C'].push_back(pair<int, int>(1, 1));
dir['C'].push_back(pair<int, int>(1, -1));
dir['C'].push_back(pair<int, int>(-1, 1));
dir['C'].push_back(pair<int, int>(-1, -1));
}vector<string> v(1);
bitset<1205> vis[1205];
set<tuple<int, int, int>> s;
void dijkstra(){
while(s.size()){
tuple<int, int, int> t = *s.begin();
s.erase(s.begin());
int x = get<1>(t), y = get<2>(t), st = get<0>(t);
for(pair<int, int> p: dir[v[x][y]]){
int x1 = x + get<0>(p), y1 = y + get<1>(p);
if(x1 < 1 or x1 > n or y1 < 1 or y1 > n or vis[x1][y1]) continue;
vis[x1][y1] = 1;
if(x1 == n and y1 == n){
cout << st + 1 + (v[x][y] == 'C');
exit(0);
}s.insert(tuple<int, int, int>(st + 1 + (v[x][y] == 'C'), x1, y1));
}
}
}signed main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
init();
s.insert(tuple<int, int, int>(1, 1, 1));
s.insert(tuple<int, int, int>(1, 1, n));
s.insert(tuple<int, int, int>(1, n, 1));
for(int i = 1; i <= n; ++i){
string s(1, ' ');
for(int j = 1; j <= n; ++j){
char c;
cin >> c;
s.push_back(c);
vis[i][j] = (c == '*');
}v.push_back(s);
}dijkstra();
cout << "No answer";
return 0;
}