迷雾森林

#include <iostream>
#include <cstring>

using namespace std;

const int N = 3010, mod = 2333;

int n, m;
int a[N][N], f[N][N];

template<class T>inline void read(T &res)
{
    char c;T flag=1;
    while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;res=c-'0';
    while((c=getchar())>='0'&&c<='9')res=res*10+c-'0';res*=flag;
}

int main()
{
    read(n), read(m);
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)        
            read(a[i][j]);                    
    
    f[n][1] = 1;
    for(int i = n; i >= 1; i --)
    {
        for(int j = 1; j <= m; j ++)
        {
            if(i == n && j == 1) continue;
            if(a[i][j] == 1) continue;
            else f[i][j] = (f[i][j - 1] + f[i + 1][j]) % mod;                            
        }
    }
            
    cout << f[1][m];
    
    return 0;
}