迷雾森林
#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;
}