#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int r,s,z;
char a[13][13];
int rez=1;
vector<int> v;

void b_find(int key){
     int low=0,high=v.size()-1,mid;
     bool fkt=false;
     while(low<=high){
                     mid=(low+high+1)/2;
                     if (key==v[mid]){ v.erase(v.begin()+mid); low=high+1;}  
                     else if (key>v[mid]) low=mid+1;
                     else high=mid-1;
     }
}

int koliko(int i,int j){
    if (a[i-1][j]=='.') z++;
    if (a[i+1][j]=='.') z++;
    if (a[i][j-1]=='.') z++;
    if (a[i][j+1]=='.') z++;
}

int main(){
    cin>>r>>s;
    for (int i=0;i<s+2;i++) a[0][i]='#';
    for (int i=0;i<r+2;i++) a[i][0]='#';
    for (int i=0;i<s+2;i++) a[i][s+1]='#';
    for (int i=0;i<r+2;i++) a[r+1][i]='#';
    for (int i=1;i<=r;i++)
        for (int j=1;j<=s;j++)
           cin>>a[i][j];
    for (int i=1;i<=r;i++)
        for (int j=1;j<=s;j++){
            z=0; if (a[i][j]!='#') koliko(i,j);
            if (z<0) z=0;  
            if (z==4){ b_find(6); v.push_back(6); }
            if (z==3){ b_find(2); v.push_back(2); }
            if (z==2 || z==1 || z==0){ b_find(1); v.push_back(1); }
            sort(v.begin(),v.end());
    }
    for (int i=0;i<v.size();i++) rez=(rez*v[i])%10007;
    printf("%d", rez);
    //system("PAUSE");
    return 0;
}            
