#include<iostream> #include<string> #include<cstring> #include<algorithm> using namespace std; string map[5]; int ANS,n; int wall[5][5],mark[5][5]; bool check(int x,int y) { for(int i=x-1;i>=0;i--) { if(mark[i][y])return 0; if(wall[i][y])break; } for(int j=y-1;j>=0;j--) { if(mark[x][j])return 0; if(wall[x][j])break; } for(int i=x+1;i<n;i++) { if(mark[i][y])return 0; if(wall[i][y])break; } for(int j=y+1;j<n;j++) { if(mark[x][j])return 0; if(wall[x][j])break; } return 1; } void DFS(int num) { if(ANS<num)ANS=num; for(int i=0;i<n;i++)//相当于对每个格子进行全排列 for(int j=0;j<n;j++) if(!wall[i][j]&&!mark[i][j]&&check(i,j)) { mark[i][j]=1; DFS(num+1); mark[i][j]=0; } } int main() { while(cin>>n&&n) { ANS=0; memset(wall,0,sizeof(wall)); memset(mark,0,sizeof(mark)); for(int i=0;i<n;i++) { cin>>map[i]; for(int j=0;j<n;j++) if(map[i][j]=='X') { wall[i][j]=1; } } DFS(0); cout<<ANS<<endl; } }