#include <iostream>
#include <queue>
using namespace std;
int check(int row, int col, char** lab, int** visited, queue<int>& plan){//находим количество стен рядом с каждой клеткой
int empty = 0;//пустые клетки
if(!visited[row][col]){
if(lab[row+1][col]=='.'){//проверяем нижнюю клетку
empty++;
if(!visited[row+1][col]){
plan.push(row+1);
plan.push(col);
}
}
if(lab[row-1][col]=='.'){//проверяем верхнюю клетку
empty++;
if(!visited[row-1][col]){
plan.push(row-1);
plan.push(col);
}
}
if(lab[row][col+1]=='.'){//проверяем правую клетку
empty++;
if(!visited[row][col+1]){
plan.push(row);
plan.push(col+1);
}
}
if(lab[row][col-1]=='.'){//проверяем левую клетку
empty++;
if(!visited[row][col-1]){
plan.push(row);
plan.push(col-1);
}
}
visited[row][col]=1;//отмечаем, что клетка пройдена
return 4-empty;//количество стен рядом с клеткой
}
return 0;
}
int main() {
int N;
cin >> N;
char** lab = new char* [N+2];
int** visited = new int * [N+2];
for(int i=0; i<N+2; i++){
lab[i] = new char [N+2];
visited[i] = new int [N+2];
for(int j=0; j<N+2; j++){
visited[i][j] = 0;//массив для проверки посещённости клеток
if(i==0||i==N+1||j==0||j==N+1){
lab[i][j]='*';//вокруг данного лабиринта делаем стену
} else {
cin >> lab[i][j];//данный лабиринт
}
}
}
queue <int> plan;
plan.push(1);//начинаем считать с левой верхней клетки
plan.push(1);
int walls=0;
while(!plan.empty()){
int row=plan.front();
plan.pop();
int col=plan.front();
plan.pop();
walls+=check(row, col, lab, visited, plan);
}
if(!visited[N][N]){//если не попали в правую нижнюю клетку
plan.push(N);//считаем начиная с неё
plan.push(N);
while(!plan.empty()){
int row=plan.front();
plan.pop();
int col=plan.front();
plan.pop();
walls+=check(row, col, lab, visited, plan);
}
}
walls-=4;//стены у левого верхнего и правого нижнего угла отсутствуют
int meters=walls*9;
cout << meters << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgY2hlY2soaW50IHJvdywgaW50IGNvbCwgY2hhcioqIGxhYiwgaW50KiogdmlzaXRlZCwgcXVldWU8aW50PiYgcGxhbil7Ly/QvdCw0YXQvtC00LjQvCDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0LXQvSDRgNGP0LTQvtC8INGBINC60LDQttC00L7QuSDQutC70LXRgtC60L7QuQoJaW50IGVtcHR5ID0gMDsvL9C/0YPRgdGC0YvQtSDQutC70LXRgtC60LgKCWlmKCF2aXNpdGVkW3Jvd11bY29sXSl7CgkJCWlmKGxhYltyb3crMV1bY29sXT09Jy4nKXsvL9C/0YDQvtCy0LXRgNGP0LXQvCDQvdC40LbQvdGO0Y4g0LrQu9C10YLQutGDCgkJCQllbXB0eSsrOwoJCQkJaWYoIXZpc2l0ZWRbcm93KzFdW2NvbF0pewoJCQkJCXBsYW4ucHVzaChyb3crMSk7CgkJCQkJcGxhbi5wdXNoKGNvbCk7CgkJCQl9CgkJCX0KCQkJaWYobGFiW3Jvdy0xXVtjb2xdPT0nLicpey8v0L/RgNC+0LLQtdGA0Y/QtdC8INCy0LXRgNGF0L3RjtGOINC60LvQtdGC0LrRgwoJCQkJZW1wdHkrKzsKCQkJCWlmKCF2aXNpdGVkW3Jvdy0xXVtjb2xdKXsKCQkJCQlwbGFuLnB1c2gocm93LTEpOwoJCQkJCXBsYW4ucHVzaChjb2wpOwoJCQkJfQoJCQl9CgkJCWlmKGxhYltyb3ddW2NvbCsxXT09Jy4nKXsvL9C/0YDQvtCy0LXRgNGP0LXQvCDQv9GA0LDQstGD0Y4g0LrQu9C10YLQutGDCgkJCQllbXB0eSsrOwoJCQkJaWYoIXZpc2l0ZWRbcm93XVtjb2wrMV0pewoJCQkJCXBsYW4ucHVzaChyb3cpOwoJCQkJCXBsYW4ucHVzaChjb2wrMSk7CgkJCQl9CgkJCX0KCQkJaWYobGFiW3Jvd11bY29sLTFdPT0nLicpey8v0L/RgNC+0LLQtdGA0Y/QtdC8INC70LXQstGD0Y4g0LrQu9C10YLQutGDCgkJCQllbXB0eSsrOwoJCQkJaWYoIXZpc2l0ZWRbcm93XVtjb2wtMV0pewoJCQkJCXBsYW4ucHVzaChyb3cpOwoJCQkJCXBsYW4ucHVzaChjb2wtMSk7CgkJCQl9CgkJCX0KCQkJdmlzaXRlZFtyb3ddW2NvbF09MTsvL9C+0YLQvNC10YfQsNC10LwsINGH0YLQviDQutC70LXRgtC60LAg0L/RgNC+0LnQtNC10L3QsAoJCQlyZXR1cm4gNC1lbXB0eTsvL9C60L7Qu9C40YfQtdGB0YLQstC+INGB0YLQtdC9INGA0Y/QtNC+0Lwg0YEg0LrQu9C10YLQutC+0LkKCX0KCXJldHVybiAwOwp9CgppbnQgbWFpbigpIHsKCWludCBOOwoJY2luID4+IE47CgljaGFyKiogbGFiID0gbmV3IGNoYXIqIFtOKzJdOwoJaW50KiogdmlzaXRlZCA9IG5ldyBpbnQgKiBbTisyXTsKCWZvcihpbnQgaT0wOyBpPE4rMjsgaSsrKXsKCQlsYWJbaV0gPSBuZXcgY2hhciBbTisyXTsKCQl2aXNpdGVkW2ldID0gbmV3IGludCBbTisyXTsKCQlmb3IoaW50IGo9MDsgajxOKzI7IGorKyl7CgkJCXZpc2l0ZWRbaV1bal0gPSAwOy8v0LzQsNGB0YHQuNCyINC00LvRjyDQv9GA0L7QstC10YDQutC4INC/0L7RgdC10YnRkdC90L3QvtGB0YLQuCDQutC70LXRgtC+0LoKCQkJaWYoaT09MHx8aT09TisxfHxqPT0wfHxqPT1OKzEpewoJCQkJbGFiW2ldW2pdPScqJzsvL9Cy0L7QutGA0YPQsyDQtNCw0L3QvdC+0LPQviDQu9Cw0LHQuNGA0LjQvdGC0LAg0LTQtdC70LDQtdC8INGB0YLQtdC90YMKCQkJfSBlbHNlIHsKCQkJCWNpbiA+PiBsYWJbaV1bal07Ly/QtNCw0L3QvdGL0Lkg0LvQsNCx0LjRgNC40L3RggoJCQl9CgkJfQoJfQoJcXVldWUgPGludD4gcGxhbjsKCXBsYW4ucHVzaCgxKTsvL9C90LDRh9C40L3QsNC10Lwg0YHRh9C40YLQsNGC0Ywg0YEg0LvQtdCy0L7QuSDQstC10YDRhdC90LXQuSDQutC70LXRgtC60LgKCXBsYW4ucHVzaCgxKTsKCWludCB3YWxscz0wOwoJd2hpbGUoIXBsYW4uZW1wdHkoKSl7CgkJaW50IHJvdz1wbGFuLmZyb250KCk7CgkJcGxhbi5wb3AoKTsKCQlpbnQgY29sPXBsYW4uZnJvbnQoKTsKCQlwbGFuLnBvcCgpOwoJCXdhbGxzKz1jaGVjayhyb3csIGNvbCwgbGFiLCB2aXNpdGVkLCBwbGFuKTsKCX0KCWlmKCF2aXNpdGVkW05dW05dKXsvL9C10YHQu9C4INC90LUg0L/QvtC/0LDQu9C4INCyINC/0YDQsNCy0YPRjiDQvdC40LbQvdGO0Y4g0LrQu9C10YLQutGDCgkJcGxhbi5wdXNoKE4pOy8v0YHRh9C40YLQsNC10Lwg0L3QsNGH0LjQvdCw0Y8g0YEg0L3QtdGRCgkJcGxhbi5wdXNoKE4pOwoJCXdoaWxlKCFwbGFuLmVtcHR5KCkpewoJCQlpbnQgcm93PXBsYW4uZnJvbnQoKTsKCQkJcGxhbi5wb3AoKTsKCQkJaW50IGNvbD1wbGFuLmZyb250KCk7CgkJCXBsYW4ucG9wKCk7CgkJCXdhbGxzKz1jaGVjayhyb3csIGNvbCwgbGFiLCB2aXNpdGVkLCBwbGFuKTsKCQl9Cgl9Cgl3YWxscy09NDsvL9GB0YLQtdC90Ysg0YMg0LvQtdCy0L7Qs9C+INCy0LXRgNGF0L3QtdCz0L4g0Lgg0L/RgNCw0LLQvtCz0L4g0L3QuNC20L3QtdCz0L4g0YPQs9C70LAg0L7RgtGB0YPRgtGB0YLQstGD0Y7RggoJaW50IG1ldGVycz13YWxscyo5OwoJY291dCA8PCBtZXRlcnMgPDwgZW5kbDsKCXJldHVybiAwOwp9