- #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