#include<bits/stdc++.h>
using namespace std;
int a[5][5];int n;int maxnum=-1;
bool judge(int x,int y){
for(int i=x-1;i>=0;i--){
if(a[i][y]==1) break;
else if(a[i][y]==0) return false;
}
for(int i=y-1;i>=0;i--){
if(a[x][i]==1) break;
else if(a[x][i]==0) return false;
}
return true;
}
void dfs(int st,int num){
int x,y;
if(st==(n*n)){
if(num>maxnum){
maxnum=num;
}
return;
}else{
x=st/n;y=st%n;
if(judge(x,y)==true&&a[x][y]==-1){
a[x][y]=0;
dfs(st+1,num+1);
a[x][y]=-1;
}
dfs(st+1,num);
}
}
int main(){
freopen("in.txt","r",stdin);
char dots={'.'};
char walls={'X'};
while(scanf("%d",&n)!=EOF&&n!=0){
for(int i=0;i<n;i++){
getchar();
for(int j=0;j<n;j++){
char temp;scanf("%c",&temp);
if(temp==dots){
a[i][j]=-1;
}else if(temp==walls){
a[i][j]=1;
}
}
}
dfs(0,0);
cout<<maxnum<<endl;
maxnum=-1;
}
return 0;
}