#include<bits/stdc++.h>
using namespace std ;

const int N = 5e3+5 ,mod = 998244353;

long long fac[N]={1} ,inv[N]={1} ;
long long fast_power(long long b,long long p){
    long long res=1;
    while(p){
        if(p%2) res=(res*b)%mod;
        b=(b*b)%mod;
        p/=2;
    }
    return res;
}
void prep(){
    for(int i=1;i<N;++i){
        fac[i]=(fac[i-1]*i)%mod;
        inv[i]=fast_power(fac[i],mod-2);
    }
}
long long choose(int n,int r){
    return ((fac[n]*inv[r])%mod*inv[n-r])%mod;
}

int n ,m ;
int ways[N] ,mem[N][15] ;
int solve(int rem,int bt){
    if(rem==0) return 1;
    if(rem<0) return 0;
    if(bt<0) return 0;
    int&ret = mem[rem][bt] ;
    if(~ret) return ret ;
    ret = 0 ;
    int val = 1<<bt ;
    for(int cnt=0;cnt<=n;cnt+=2){
        long long cur = 1ll * val * cnt ;
        if(cur>rem) break ;
        ret = (ret + 1ll*solve(rem-cur,bt-1)*ways[cnt]%mod)%mod;
    }
    return ret ;
}
int main(){
    prep();
    cin >> n >> m ;
    for(int cnt=0;cnt<=n;++cnt) ways[cnt] = choose(n,cnt) ;
    memset(mem,-1,sizeof mem);
    cout << solve(m,13) ;
    return 0;
}

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using pp=pair<ll,ll>;
const ll INF=1e18;
const ll mod=1e9+7;
const double pi=3.14159265358979323846;


ll modpow(ll a, ll b) {     // aのb乗
  ll ans=1;
  for (ll i=0; i<63; i++) {
    if (b & ((ll)1<<i)) {
      ans*=a;
      ans%=mod;
    }
    a*=a;
    a%=mod;
  }
  return ans;
}


int main() {
  ll h, w, K=0, ans=0;
  cin >> h >> w;
  vector<vector<char>> S(h, vector<char>(w));
  vector<vector<ll>> V(h, vector<ll>(w,0));
  for (int i=0; i<h; i++) {
    for (int j=0; j<w; j++) {
      cin >> S[i][j];
      if (S[i][j]=='.') {K++;}
    }
  }
  
  
  
  int tmp=0;
  for (int i=0; i<h; i++) {
    tmp=0;
    int l=0, r=0;
    for (int j=0; j<w; j++) {
      if (S[i][j]=='.') {
        r++;
        tmp++;
      }
      else {
        for (int k=l; k<r; k++) {
          V[i][k]+=tmp;
        }
        l=r+1;
        r=l;
        tmp=0;
      }
    }
    if (S[i][w-1]=='.') {
      for (int k=l; k<r; k++) {
        V[i][k]+=tmp;
      }
    }
  }
  
  
  
  for (int j=0; j<w; j++) {
    tmp=0;
    int l=0, r=0;
    for (int i=0; i<h; i++) {
      if (S[i][j]=='.') {
        r++;
        tmp++;
      }
      else {
        for (int k=l; k<r; k++) {
          V[k][j]+=tmp;
        }
        l=r+1;
        r=l;
        tmp=0;
      }
    }
    if (S[h-1][j]=='.') {
      for (int k=l; k<r; k++) {
        V[k][j]+=tmp;
      }
    }
  }
  
  
  /*
  for (int i=0; i<h; i++) {
    for (int j=0; j<w; j++) {
      cout << V[i][j] << " ";
    }
    cout << endl;
  }
  */
  
  
  for (int i=0; i<h; i++) {
    for (int j=0; j<w; j++) {
      if (V[i][j]==0) {continue;}
      V[i][j]--;
      ans+=modpow(2, K);
      ans-=modpow(2, K-V[i][j]);
      ans+=mod;
      ans%=mod;
    }
  }
  cout << ans << endl;
}  