#define NDEBUG #include #include #include #include #include using namespace std; #ifndef NDEBUG #define PV(var) std::cerr<<#var<<": "< v; int rhs; Eq() : v(R*C, 0) {} void xx(const Eq &e) { for(int i=0; i<(int)v.size(); ++i) { v[i]^=e.v[i]; } rhs^=e.rhs; } bool empty() const { for(int i=0; i<(int)v.size(); ++i) if(v[i]) return false; return true; } void print() { #ifndef NDEBUG for(int i=0; i<(int)v.size(); ++i) if(v[i]) cerr<<"("< tab; int num(int x, int y) { return y*C+x; } int main2() { tab.resize(0); scanf("%d %d", &R, &C); if(R==0 && C==0) return 1; tab.resize(R*C, Eq()); PV(R); PV(C); PN; for(int i=0; i0) tab[num(j, i)].v[num(j-1, i)]=1; if(i>0) tab[num(j, i)].v[num(j, i-1)]=1; if(i tab1(tab); if(tab1[R*C-2].empty()) tab1[R*C-2].rhs=ll; else ++ll; tab1[R*C-2].v[R*C-2]=1; for(int lll=0; lll<2; ++lll) { vector tab2(tab1); if(tab2[R*C-1].empty()) tab2[R*C-1].rhs=lll; else ++lll; tab2[R*C-1].v[R*C-1]=1; for(int i=R*C-1; i>=0; --i) { int j=i; for(j=0; j