H,W=map(int,raw_input().split()) S=[list(raw_input()) for i in range(H)] mod=1000000007 isVal=[-1 for i in range(W)] marble=1 cross=1 excep1=1 excep0=1 for h in range(H): b=-1 for w in range(W): if S[h][w]=='1': if (h+w)%2==0: excep0=0 else: excep1=0 if isVal[w]==h%2: cross=0 else: isVal[w]=1-(h%2) if b==-1: b=w%2 elif b!=w%2: marble=0 elif S[h][w]=='0': if (h+w)%2==0: excep1=0 else: excep0=0 if isVal[w]==1-(h%2): cross=0 else: isVal[w]=h%2 if b==-1: b=1-w%2 elif b!=1-w%2: marble=0 if b==-1: marble*=2 marble%=mod for v in isVal: #print v, if v==-1: cross*=2 cross%=mod #print print (marble+cross-excep0-excep1)%mod