#include char field[5][5]; int size; int max; bool cols[5]; bool rows[5]; void Draw() { for(int i = 0; i < size; i++) { for(int j = 0; j < size; j++) printf("%c", field[i][j]); printf("\n"); } } bool Validate() { int count = 0; for(int i = 0; i < size; i++) { cols[i] = false; rows[i] = false; } for(int i = 0; i < size; i++) { for(int j = 0; j < size; j++) { if(field[i][j] == '1' && !cols[j] && !rows[i]) { count++; cols[j] = true; rows[i] = true; continue; } if(field[i][j] == '1' && (cols[j] || rows[i])) return false; if(field[i][j] == 'X') { rows[i] = false; cols[j] = false; } } } if (count > max) max = count; return true; } void Solve(int row = 0, int col = 0) { if (col < size-1) Solve(row, col+1); if (col == size-1 && row < size-1) Solve(row+1, 0); Validate(); if (field[row][col] == '.') { field[row][col] = '1'; Validate(); if (col < size-1) Solve(row, col+1); if (col == size-1 && row < size-1) Solve(row+1, 0); field[row][col] = '.'; // Validate(); } } int main() { scanf("%d\n", &size); while(size) { for(int i = 0; i < size; i++) { scanf("%s\n", field[i]); } max = 0; // Draw(); Solve(); printf("%d\n", max); scanf("%d\n", &size); } return 0; }