#include <cstdio>

using namespace std;

int r, s, rj;
bool polje[11][11], nesto = 0;
char tmp;

int rek( int x, int y, long long p ){
	if( x == r - 1 && y == s - 1 ) return 1;
	if( !polje[x][y] ) return 0;
	int x1, y1, ret = 0, z;
	x1 = x;y1 = y + 1;z = x1 * s + y1;
	if( x1 >= 0 && x1 < r && y1 >= 0 && y1 < s && polje[x1][y1] && (p>>(z-1))%10 == 0 ) ret += rek( x1, y1, p + 1<<z );
	x1 = x;y1 = y - 1;z = x1 * s + y1;
	if( x1 >= 0 && x1 < r && y1 >= 0 && y1 < s && polje[x1][y1] && (p>>(z-1))%10 == 0 ) ret += rek( x1, y1, p + 1<<z );
	x1 = x + 1;y1 = y;z = x1 * s + y1;
	if( x1 >= 0 && x1 < r && y1 >= 0 && y1 < s && polje[x1][y1] && (p>>(z-1))%10 == 0 ) ret += rek( x1, y1, p + 1<<z );
	x1 = x - 1;y1 = y;z = x1 * s + y1;
	if( x1 >= 0 && x1 < r && y1 >= 0 && y1 < s && polje[x1][y1] && (p>>(z-1))%10 == 0 ) ret += rek( x1, y1, p + 1<<z );
	return ret % 10007;
}

int main( void ){
	scanf( "%d%d", &r, &s );
	for( int i = 0; i < r; ++i )
		for( int j = 0; j < s; ++j ){
			scanf( "%c", &tmp );
			if( tmp == '#' ){polje[i][j] = 0;nesto = 1;}else polje[i][j] = 1;
		}
	if( !nesto && ( r == 2 || s == 2 ) ){
		if( s == 2 ){
			s == r;
			r == 2;
		}
		rj = 1;
		for( int i = 1; i < s; ++i )
			rj *= 2;
		printf( "%d", rj );
		return 0;
	}
	rj = rek( 0, 0, 1<<(r * s) );
	printf( "%d", rj % 10007 );
	return 0;
}
