#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int vis[20][20];
ll x[100000000];
ll a[20];
char c1[20][20];
ll oldsix;
ll ti=0;
void main2(int m,int c)
{
if(m==oldsix+1)
{
ti++;
return ;
}
int d=c;
while(d!=0)
{
int cnt=0;
int e=d&(-d);
d-=e;
cnt=x[e];
a[m]=cnt;
if(vis[m][cnt]==0&&c1[m][cnt]=='*')
{
for(int i=m;i<=oldsix;i++)
{
vis[i][i-m+cnt]++;
vis[i][cnt-i+m]++;
}
main2(m+1,c-e);
for(int i=m;i<=oldsix;i++)
{
vis[i][i-m+cnt]--;
vis[i][cnt-i+m]--;
}
}
}
}
int main(){
for(int i=0;i<=17;i++) x[(1<<i)]=i+1;
cin>>oldsix;
for(int i=1;i<=oldsix;i++)
{
for(int j=1;j<=oldsix;j++)
{
cin>>c1[i][j];
}
}
int k=(1<<(oldsix))-1;
main2(1,k);
cout<<ti;
return 0;
}
求解