#include<bits/stdc++.h>
using namespace std;
string mp[300005];
int const p=998244353;
int pw(int x,int y)
{
    int res=1;
    while(y)
    {
        if(y&1)res=1ll*res*x%p;
        x=1ll*x*x%p;
        y>>=1;
    }
    return res;
}
vector<int>lef[300005],up[300005];
int t[300005];
int main()
{
    int n,m,s=0,cnt=0,cnta=0,cntb=0,cntc=0,cntd=0,cnte=0;
    cin>>n>>m;
    for(int i=0;i<n;i++)cin>>mp[i];
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(mp[i][j]=='o')cnt++;
    for(int i=0;i<n;i++)
    {
        lef[i].resize(m);lef[i][0]=(mp[i][0]=='o');
        up[i].resize(m);
        for(int j=1;j<m;j++)
        {
            if(mp[i][j]=='o')lef[i][j]=lef[i][j-1]+1;
            if(lef[i][j]>=2)t[lef[i][j]+1]--,t[2]++;
        }
    }
    for(int j=0;j<m;j++)
    {
        up[0][j]=(mp[0][j]=='o');
        for(int i=1;i<n;i++)
        {
            if(mp[i][j]=='o')up[i][j]=up[i-1][j]+1;
            if(up[i][j]>=2)t[up[i][j]+1]--,t[2]++;
        }
    }
    int ans=0;
    for(int i=2;i<=max(n,m);i++)
    {
        t[i]=(t[i]+t[i-1])%p;
        if(t[i])ans=(ans+1ll*((i&1)?p-1:1)*t[i]%p*pw(2,cnt-i))%p;
    }
    printf("%d",ans);
    return 0;
}