#include "iostream" using namespace std; string map[5]; int n,maxinum; int Putcan(int col,int row) { for(int i=row-1;i>=0;i--) { if(map[col][i]=='O') return 0; else if(map[col][i]=='X') break; } for(int i=col-1;i>=0;i--) { if(map[i][row]=='O') return 0; else if(map[i][row]=='X') break; } return 1; } void Dfs(int pos,int count) { if(maxinum<count) maxinum=count; int col=pos/n;// 确定行 int row=pos%n;// 确定列 cout<<col<<" "<<row<<" "<<count<<endl; if(col<n) { if(map[col][row]=='.'&&Putcan(col,row))// 判断此处是否可放 { map[col][row]='O'; //在该位置处放置 Dfs(pos+1,count+1);//向右走 map[col][row]='.';//注意清楚上一个记录 } Dfs(pos+1,count);//该位置不可放是右走 } } int main() { freopen("data.in","r",stdin); while(scanf("%d",&n)&&n!=0) { maxinum=0; for(int i=0;i<n;i++) cin>>map[i]; // for(int i=0;i<n;i++) // cout<<map[i]<<endl; Dfs(0,0); printf("%d/n",maxinum); } //while(1); return 0; }