#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
const int N=100+10;
const int dx[]={0,0,-1,1};
const int dy[]={-1,1,0,0};
const ll MOD=1e9;
ll b[N][N];
ll det(int n)
{
ll ret=1;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
while(b[j][i])
{
ll t=b[i][i]/b[j][i];
for(int k=i;k<n;k++)
{
b[i][k]=(b[i][k]-t*b[j][k]%MOD+MOD)%MOD;
swap(b[i][k],b[j][k]);
}
ret=(-ret+MOD)%MOD;
}
}
ret*=b[i][i];
ret=(ret%MOD+MOD)%MOD;
}
return ret;
}
char g[15][15];
int id[15][15];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<n;i++)
scanf("%s",g[i]);
memset(b,0,sizeof(b));
int cnt=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(g[i][j]=='*') continue;
id[i][j]=cnt++;
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(g[i][j]=='*') continue;
for(int k=0;k<4;k++)
{
int ni=i+dx[k];
int nj=j+dy[k];
if(ni<0||ni>=n||nj<0||nj>=m) continue;
if(g[ni][nj]=='.')
{
b[id[i][j]][id[i][j]]++;
b[id[i][j]][id[ni][nj]]=-1;
}
}
}
printf("%lld\n",det(cnt-1));
}
return 0;
}
URAL-1627 Join
猜你喜欢
转载自blog.csdn.net/wl16wzl/article/details/83582939
今日推荐
周排行