#include #include #include #include ///////// #define REP(i, x, n) for(int i = x; i < n; i++) #define rep(i,n) REP(i,0,n) #define P(p) cout<<(p)<= 10000000){cout << n;} else if( n >= 1000000){cout << "0" << n;} else if( n >= 100000){cout << "00" << n;} else if( n >= 10000){cout << "000" << n;} else if( n >= 1000){cout << "0000" << n;} else if( n >= 100){cout << "00000" << n;} else if( n >= 10){cout << "000000" << n;} else {cout << "0000000" << n;} } return false; } int main(void){ cin.tie(0); ios::sync_with_stdio(false); cout << fixed;// //cout << setprecision(7);// int R,C;//[1,10^9] cin>>R>>C; int ans0,ans1,ans2,ans3; ans0 = 0; ans1 = 0; ans2 = 0; ans3 = 0; int tempA,tempB; int A[3]; int B[3]; A[0]=0;A[1]=0;A[2]=0; B[0]=0;B[1]=0;B[2]=0; const int keta = 10000; if( R%2==0 && C%2==0 ){ // RC/4 if(R == C){ tempA = R/2; A[2] = tempA%keta; A[1] = (tempA/keta)%keta; A[0] = (tempA/keta)/keta; tempB = C/2; B[2] = tempB%keta; B[1] = (tempB/keta)%keta; B[0] = (tempB/keta)/keta; ans0 = mul3(A[0],A[1],A[2],B[0],B[1],B[2],&ans1,&ans2,&ans3); } else{ tempA = R/2; A[2] = tempA%keta; A[1] = (tempA/keta)%keta; A[0] = (tempA/keta)/keta; tempB = C; B[2] = tempB%keta; B[1] = (tempB/keta)%keta; B[0] = (tempB/keta)/keta; ans0 = mul3(A[0],A[1],A[2],B[0],B[1],B[2],&ans1,&ans2,&ans3); } } else if( R%2 != C%2){ if(R%2==0){ //C*R/2 tempA = R/2; A[2] = tempA%keta; A[1] = (tempA/keta)%keta; A[0] = (tempA/keta)/keta; tempB = C; B[2] = tempB%keta; B[1] = (tempB/keta)%keta; B[0] = (tempB/keta)/keta; ans0 = mul3(A[0],A[1],A[2],B[0],B[1],B[2],&ans1,&ans2,&ans3); }else{//C%2==0 //R*C/2 tempA = R; A[2] = tempA%keta; A[1] = (tempA/keta)%keta; A[0] = (tempA/keta)/keta; tempB = C/2; B[2] = tempB%keta; B[1] = (tempB/keta)%keta; B[0] = (tempB/keta)/keta; ans0 = mul3(A[0],A[1],A[2],B[0],B[1],B[2],&ans1,&ans2,&ans3); } }else{//R%2==C%2==1 if(R != 1 && C != 1 && R!=C){ tempA = R/2; A[2] = tempA%keta; A[1] = (tempA/keta)%keta; A[0] = (tempA/keta)/keta; tempB = C; B[2] = tempB%keta; B[1] = (tempB/keta)%keta; B[0] = (tempB/keta)/keta; ans0 = mul3(A[0],A[1],A[2],B[0],B[1],B[2],&ans1,&ans2,&ans3); ans0 += add3(ans1/keta,ans1%keta, ans2/keta,ans2%keta, ans3/keta,ans3%keta,((C/2+1)/keta)/keta,((C/2+1)/keta)%keta,(C/2+1)%keta,&ans1,&ans2,&ans3); }else{//R==C //+R/2 tempA = R/2; A[2] = tempA%keta; A[1] = (tempA/keta)%keta; A[0] = (tempA/keta)/keta; tempB = C/2; B[2] = tempB%keta; B[1] = (tempB/keta)%keta; B[0] = (tempB/keta)/keta; ans0 = mul3(A[0],A[1],A[2],B[0],B[1],B[2],&ans1,&ans2,&ans3); ans0 += add3(ans1/keta,ans1%keta, ans2/keta,ans2%keta, ans3/keta,ans3%keta,((C/2+1)/keta)/keta,((C/2+1)/keta)%keta,(C/2+1)%keta,&ans1,&ans2,&ans3); } } ans0 += add3(ans1/keta,ans1%keta, ans2/keta,ans2%keta, ans3/keta,ans3%keta,0,0,-1,&ans1,&ans2,&ans3); bool top = true; top = vi(ans0,top); top = vi(ans1,top); top = vi(ans2,top); top = vi(ans3,top); if(top == true){ cout << "0"; } cout << endl; return 0; }