hdu6122 数学

来源:互联网 发布:时间浪人网络大电影 编辑:程序博客网 时间:2024/05/29 02:25
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1005;const int mod=998244353;char s[maxn];int fl[maxn],fr[maxn],sl,sr,flr,n,m,i,j,ans;int quick_mod(ll n,int m){    ll res=1;    while(m)    {        if(m&1)            res=res*n%mod;        n=n*n%mod;        m>>=1;    }    return (int)res;}void init(){    memset(fl,-1,sizeof(fl));    memset(fr,-1,sizeof(fr));    sr=n;    sl=m;    flr=-1;    ans=0;}int main(){    //freopen("C:\\Users\\杨凡\\Desktop\\数据\\1003.in","r",stdin);    int t,i,j,flag;    scanf("%d",&t);    while(t--&&scanf("%d%d",&n,&m)!=EOF)    {        init();        for(i=0;i<n;i++)        {            scanf("%s",s);            for(j=0;s[j];j++)            {                if(s[j]=='?')                    continue;                flag=0;                if(s[j]=='B')                    flag=1;                if((i+j)&1)                    flag=!flag;                if(fr[i]==-1)                {                    fr[i]=flag;                    sr--;                }                else if(fr[i]!=flag)                    sr=-1;                if(fl[j]==-1)                {                    fl[j]=flag;                    sl--;                }                else if(fl[j]!=flag)                    sl=-1;                if(flr==-2)                    continue;                if(flr==-1)                    flr=flag;                else if(flr!=flag)                    flr=-2;            }        }        if(sl>=0)            ans=(ans+quick_mod((ll)2,sl))%mod;        if(sl>=0)            ans=(ans+quick_mod((ll)2,sr))%mod;        if(flr>=-1)        {            if(flr==-1)                ans=(ans-2+mod)%mod;            else                ans=(ans-1+mod)%mod;        }        printf("%d\n",ans);    }    return 0;}