#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int a[n][m];
int recentRow[n][m] , recentCol[n][m];
int dp[n][m];
for(int i=0;i<n;i++)
{
string s;
cin>>s;
int x = 0;
for(int j=0;j<m;j++)
{
a[i][j] = (s[x++]-'0');
recentRow[i][j]=-1;
recentCol[i][j]=-1;
dp[i][j]=0;
}
}
for(int i=1;i<n;i++)
{
for(int j=1;j<m;j++)
{
recentRow[i][j] = ((a[i][j-1]==0) ? j-1 : recentRow[i][j-1]);
recentCol[i][j] = ((a[i-1][j]==0) ? i-1 : recentCol[i-1][j]);
}
}
for(int i=0;i<m;i++)
{
if(a[0][i]==0 and a[0][0]==0)
dp[0][i] = 1;
else
dp[0][i] = 0;
}
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<m;j++)
// {
// cout<<dp[i][j]<<" ";
// }
// cout<<endl;
// }
for(int i=0;i<n;i++)
{
if(a[i][0]==0 and a[0][0]==0)
dp[i][0]=1;
else
dp[i][0]=0;
}
for(int i=1;i<n;i++)
{
for(int j=1;j<m;j++)
{
if(a[i][j]==0){
if(recentRow[i][j]!=-1)
dp[i][j]= (dp[i][j]%1000000007 + dp[i][recentRow[i][j]]%1000000007)%1000000007;
if(recentCol[i][j]!=-1)
dp[i][j]= (dp[i][j]%1000000007 + dp[recentCol[i][j]][j]%1000000007)%1000000007;
}
}
}
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<m;j++)
// {
// cout<<recentCol[i][j]<<" ";
// }
// cout<<endl;
// }
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<m;j++)
// {
// cout<<recentRow[i][j]<<" ";
// }
// cout<<endl;
// }
if(a[n-1][m-1]!=1 and a[0][0]!=-1)
cout<<dp[n-1][m-1]<<endl;
else
cout<<0<<endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAppbnQgbWFpbigpCnsKICAgIGludCBuLG07CiAgICBjaW4+Pm4+Pm07CiAgICAgaW50IGFbbl1bbV07CiAgICAgaW50IHJlY2VudFJvd1tuXVttXSAsIHJlY2VudENvbFtuXVttXTsKICAgICBpbnQgZHBbbl1bbV07CiAgICBmb3IoaW50IGk9MDtpPG47aSsrKQogICAgewogICAgICAgIHN0cmluZyBzOwogICAgICAgIGNpbj4+czsKICAgICAgICBpbnQgeCA9IDA7CiAgICAgICAgZm9yKGludCBqPTA7ajxtO2orKykKICAgICAgICB7CiAgICAgICAgICAgIGFbaV1bal0gPSAoc1t4KytdLScwJyk7CiAgICAgICAgICAgIHJlY2VudFJvd1tpXVtqXT0tMTsKICAgICAgICAgICAgcmVjZW50Q29sW2ldW2pdPS0xOwogICAgICAgICAgICBkcFtpXVtqXT0wOwogICAgICAgIH0KICAgIH0KIAogCiAKICAgIGZvcihpbnQgaT0xO2k8bjtpKyspCiAgICB7CiAgICAgICAgZm9yKGludCBqPTE7ajxtO2orKykKICAgICAgICB7CiAgICAgICAgICAgIHJlY2VudFJvd1tpXVtqXSA9ICgoYVtpXVtqLTFdPT0wKSA/IGotMSA6IHJlY2VudFJvd1tpXVtqLTFdKTsKICAgICAgICAgICAgcmVjZW50Q29sW2ldW2pdID0gKChhW2ktMV1bal09PTApID8gaS0xIDogcmVjZW50Q29sW2ktMV1bal0pOwogICAgICAgIH0KICAgIH0KIAogICAgZm9yKGludCBpPTA7aTxtO2krKykKICAgIHsKICAgICAgICBpZihhWzBdW2ldPT0wIGFuZCBhWzBdWzBdPT0wKQogICAgICAgICAgICBkcFswXVtpXSA9IDE7CiAgICAgICAgZWxzZQogICAgICAgICAgICBkcFswXVtpXSA9IDA7CiAgICB9CiAKICAgIC8vIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICAvLyB7CiAgICAvLyAgICAgZm9yKGludCBqPTA7ajxtO2orKykKICAgIC8vICAgICB7ICAgICAgICAgICAKICAgIC8vICAgICAgICAgY291dDw8ZHBbaV1bal08PCIgIjsKICAgIC8vICAgICB9CiAgICAvLyAgICAgY291dDw8ZW5kbDsKICAgIC8vIH0KIAogICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgIHsKICAgICAgICAgaWYoYVtpXVswXT09MCAgYW5kIGFbMF1bMF09PTApCiAgICAgICAgICAgIGRwW2ldWzBdPTE7CiAgICAgICAgZWxzZQogICAgICAgICAgICBkcFtpXVswXT0wOwogICAgfQogCiAgICAKIAogICAgZm9yKGludCBpPTE7aTxuO2krKykKICAgIHsKICAgICAgICBmb3IoaW50IGo9MTtqPG07aisrKQogICAgICAgIHsKICAgICAgICAgICAgaWYoYVtpXVtqXT09MCl7CiAgICAgICAgICAgICAgICBpZihyZWNlbnRSb3dbaV1bal0hPS0xKQogICAgICAgICAgICAgICAgICAgIGRwW2ldW2pdPSAoZHBbaV1bal0lMTAwMDAwMDAwNyArIGRwW2ldW3JlY2VudFJvd1tpXVtqXV0lMTAwMDAwMDAwNyklMTAwMDAwMDAwNzsKICAgICAgICAgICAgICAgIGlmKHJlY2VudENvbFtpXVtqXSE9LTEpCiAgICAgICAgICAgICAgICAgICAgZHBbaV1bal09IChkcFtpXVtqXSUxMDAwMDAwMDA3ICsgZHBbcmVjZW50Q29sW2ldW2pdXVtqXSUxMDAwMDAwMDA3KSUxMDAwMDAwMDA3OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICAvLyB7CiAgICAvLyAgICAgZm9yKGludCBqPTA7ajxtO2orKykKICAgIC8vICAgICB7ICAgICAgICAgICAKICAgIC8vICAgICAgICAgY291dDw8cmVjZW50Q29sW2ldW2pdPDwiICI7CiAgICAvLyAgICAgfQogICAgLy8gICAgIGNvdXQ8PGVuZGw7CiAgICAvLyB9CgogICAgLy8gZm9yKGludCBpPTA7aTxuO2krKykKICAgIC8vIHsKICAgIC8vICAgICBmb3IoaW50IGo9MDtqPG07aisrKQogICAgLy8gICAgIHsgICAgICAgICAgIAogICAgLy8gICAgICAgICBjb3V0PDxyZWNlbnRSb3dbaV1bal08PCIgIjsKICAgIC8vICAgICB9CiAgICAvLyAgICAgY291dDw8ZW5kbDsKICAgIC8vIH0KCgogICAgaWYoYVtuLTFdW20tMV0hPTEgYW5kIGFbMF1bMF0hPS0xKQogICAgICAgIGNvdXQ8PGRwW24tMV1bbS0xXTw8ZW5kbDsKICAgIGVsc2UgCiAgICAgICAgY291dDw8MDw8ZW5kbDsKIAogICAgICAgCiAKfQo=