插头dp;
姿态1;
#include<cstdio>
#include<algorithm>
#include<bitset>
#define rep(i,k,n) for(int i=k;i<=(n);i++)
#define mod 20110520
using namespace std;
const int N = 5000000;
int n, m;
int g[N], ans[N], state[700000], op = 0, top = 0;
char s[105][105];
int a[105][105];
bool ok(int x) {
rep(i, 0, m) {
if((x >> (i * 2)) % 4 == 3)return false;
}
return true;
}
void init_state() {
rep(i, 0, (1 << ((m+1) * 2)) - 1)if(ok(i))state[++top] = i; //
}
inline int F(int x, int pos, int up, int left) {
int tmp = (x >> (pos * 2)) % 4;
tmp ^= up;
x ^= (tmp << (pos * 2));
x >>= 2;
x <<= 2;
x ^= left;
return x;
}
int main() {
// freopen("in.in", "r", stdin);
scanf("%d%d", &n, &m);
rep(i, 1, n)scanf("%s", s[i] + 1);
if(n >= m) {
rep(i, 1, n)rep(j, 1, m)a[i][j] = (s[i][j] == '_' ? 1 : 0);
} else {
rep(i, 1, n)rep(j, 1, m)a[j][i] = (s[i][j] == '_' ? 1 : 0);
swap(n, m);
}
init_state();
ans[0]=1;
rep(i, 1, n) {
rep(j, 1, m) {
rep(k, 1, top)g[state[k]] = 0;
if(a[i][j]) {
rep(k, 1, top) {
int tmp = state[k];
if(!ans[state[k]])continue;
int left = tmp % 4;
int up = (tmp >> (j * 2)) % 4;
if(!left && !up) {
int ne = F(tmp, j, 2, 0);
g[ne] = (g[ne] + ans[tmp]) % mod;
ne = F(tmp, j, 0, 2);
g[ne] = (g[ne] + ans[tmp]) % mod;
ne = F(tmp, j, 1, 1);
g[ne] = (g[ne] + ans[tmp]) % mod; //轮廓线!!
}
if(left == 1 && up == 0) {
int ne = F(tmp, j, 0, 1);
g[ne] = (g[ne] + ans[tmp]) % mod;
ne = F(tmp, j, 0, 0);
g[ne] = (g[ne] + ans[tmp]) % mod;
}
if(left == 0 && up == 1) {
int ne = F(tmp, j, 1, 0);
g[ne] = (g[ne] + ans[tmp]) % mod;
ne = F(tmp, j, 0, 0);
g[ne] = (g[ne] + ans[tmp]) % mod;
}
if(left== 2 && up == 0) {
int ne = F(tmp, j, 0, 2);
g[ne] = (g[ne] + ans[tmp]) % mod;
ne = F(tmp, j, 1, 0);
g[ne] = (g[ne] + ans[tmp]) % mod;
}
if(left == 0 && up == 2) {
int ne = F(tmp, j, 2, 0);
g[ne] = (g[ne] + ans[tmp]) % mod;
ne = F(tmp, j, 0, 1);
g[ne] = (g[ne] + ans[tmp]) % mod;
}
if(left == 2 && up == 2) {
int ne = F(tmp, j, 0, 0);
g[ne] = (g[ne] + ans[tmp]) % mod;
}
}
rep(k, 1, top)ans[state[k]] = g[state[k]];
}
else {
rep(k, 1, top) {int tmp = state[k]; if((tmp % 4) || ((tmp >> (j * 2)) % 4))ans[tmp] = 0;
}
}
}
rep(k, 1, top) { int tmp = state[k]; if(tmp % 4)ans[tmp] = 0;}
}
printf("%d\n",ans[0]);
return 0;
}