#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;
}
}