#include #include int main() { int n; std::cin >> n; std::vector board(n*n); for(int i=0; i> board[i]; std::vector visited(n*n); for(int r=0; r= n || curc < 0 || curc >= n) break; int curidx = curr*n + curc; if(board[curidx] == '?') { std::cout << 0 << std::endl; return 0; } else if(board[curidx] == '.') { visited[curidx] = true; } else break; curr += dr[i]; curc += dc[i]; } } } else if(board[idx] >= '0' && board[idx] <= '4') { // check adjacent lights int target = board[idx] - '0'; int actual = 0; int dr[] = {1, -1, 0, 0}; int dc[] = {0, 0, 1, -1}; for(int i=0; i<4; i++) { int curr = r + dr[i]; int curc = c + dc[i]; if(curr < 0 || curr >= n || curc < 0 || curc >= n) continue; int curidx = curr*n + curc; if(board[curidx] == '?') actual++; } if(actual != target) { std::cout << 0 << std::endl; return 0; } } } } // check all squares seen for(int i=0; i