#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
#include<queue>
#define LL long long
using namespace std;
char ss[5][5];
char mp[5][5];
int vis[5][5];
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
memset(vis,0,sizeof(vis));
memset(ss,0,sizeof(ss));
for(int i=0;i<n;i++)
{
scanf("%s",ss[i]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(ss[i][j]=='.'){
for(int k=i-1;k>=0&&ss[k][j]=='.';k--)
vis[i][j]++;
for(int k=j-1;k>=0&&ss[i][k]=='.';k--)
vis[i][j]++;
for(int k=j+1;k<n&&ss[i][k]=='.';k++)
vis[i][j]++;
for(int k=i+1;k<n&&ss[k][j]=='.';k++)
vis[i][j]++;
vis[i][j]++;
}
}
}
int cnt=0;int mi;
int x,y;
for(int i=0;i<n;i++)
{
mi=8;
for(int j=0;j<n;j++)
{
if(vis[i][j]<mi&&vis[i][j]>0)
{
mi=vis[i][j];
x=i;
y=j;
}
}
if(mi!=8)
{
cnt++;
for(int k=x-1;k>=0&&ss[k][y]=='.';k--)
vis[k][y]=8;
for(int k=y-1;k>=0&&ss[x][k]=='.';k--)
vis[x][k]=8;
for(int k=x+1;k<n&&ss[k][y]=='.';k++)
vis[k][y]=8;
for(int k=y+1;k<n&&ss[x][k]=='.';k++)
vis[x][k]=8;
vis[x][y]=8;
i--;
}
}
cout<<cnt<<endl;
}
}
#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
#include<queue>
#define LL long long
using namespace std;
char ss[5][5];
int vis[5][5];
int t=0;
int minl=0;int n;
bool judge(int x,int y)//判断能否放置
{
for(int k=x-1;k>=0;k--){
if(ss[k][y]=='X')
break;
if(ss[k][y]=='1')
return false;
}
for(int k=x+1;k<n;k++){
if(ss[k][y]=='X')
break;
if(ss[k][y]=='1')
return false;
}
for(int k=y-1;k>=0;k--){
if(ss[x][k]=='X')
break;
if(ss[x][k]=='1')
return false;
}
for(int k=y+1;k<n;k++){
if(ss[x][k]=='X')
break;
if(ss[x][k]=='1')
return false;
}
return true;
}
void dfs(int t)
{
int i,j;
if(t>minl)
{
minl=t;
}
for( i=0;i<n;i++)
{
for( j=0;j<n;j++)
{
if(ss[i][j]=='.'&&judge(i,j)&&!vis[i][j])
{
cout<<"i j"<<i<<" "<<j<<endl;
vis[i][j]=1;
ss[i][j]='1';
dfs(t+1);
vis[i][j]=0;
ss[i][j]='.';
}
}
}
return ;
}
int main()
{
while(scanf("%d",&n) && n)
{
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
scanf("%s",ss[i]);
}
dfs(0);
cout<<minl<<endl;
minl=0;
}
}