#include <iostream>
#include <cstdio>
const int N = 15;
int n, base;
unsigned long long ans;
int s[N];
void DFS(int numRow, int col, int prin, int sub) {
if(col == base) {ans++; return; }
int able = base & (~(s[numRow] | col | prin | sub));
while(able){
int lowbit = able & (-able);
able -= lowbit;
DFS(numRow + 1, col | lowbit, (prin | lowbit) << 1, (sub | lowbit) >> 1);
}
}
int main() {
scanf("%d\n", &n);
base = (1 << n) - 1;
for(int i = 0; i < n; i++){
for(int j = 1; j < n; j++) {
char c = getchar();
if(c == '.') s[i] |= (1 << i);
}
char end = getchar();
}
DFS(1, 0, 0, 0);
std::cout << ans << '\n';
return 0;
}
第一个点 AC,余下 WA