#include<iostream>
#include<algorithm>
#include<math.h>
#include<vector>
#include<queue>
#include<unordered_map>
using namespace std;
int main()
{
vector<vector<int> >arr = {{2, 2, 3},
{4, 5, 6},
{7, 8, 9}};
vector<vector<vector<int>> >dp(arr.size(),vector<vector<int> >(arr[0].size(), vector<int>(2, 0)));
if((arr[0][0] & 1)) dp[0][0][1] = 1;
else dp[0][0][0] = 1;
bool right = false;
bool down = false;
for(int i=0; i<arr.size(); i++)
{
for(int j=0; j<arr[0].size(); j++)
{
if(j-1>=0) right = true;
else right = false;
if(i-1>=0) down = true;
else down = false;
if((arr[i][j] & 1))
{
if(right)
{
dp[i][j][0] += dp[i][j-1][1];
dp[i][j][1] += dp[i][j-1][0];
}
if(down)
{
dp[i][j][0] += dp[i-1][j][1];
dp[i][j][1] += dp[i-1][j][0];
}
}
else
{
if(right)
{
dp[i][j][0] += dp[i][j-1][0];
dp[i][j][1] += dp[i][j-1][1];
}
if(down)
{
dp[i][j][0] += dp[i-1][j][0];
dp[i][j][1] += dp[i-1][j][1];
}
}
}
}
cout << "Final Ans: -> " << dp[arr.size()-1][arr[0].size()-1][0] << endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8bWF0aC5oPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTx1bm9yZGVyZWRfbWFwPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkKewoKICAgIHZlY3Rvcjx2ZWN0b3I8aW50PiA+YXJyID0ge3syLCAyLCAzfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7NCwgNSwgNn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezcsIDgsIDl9fTsKCiAgICB2ZWN0b3I8dmVjdG9yPHZlY3RvcjxpbnQ+PiA+ZHAoYXJyLnNpemUoKSx2ZWN0b3I8dmVjdG9yPGludD4gPihhcnJbMF0uc2l6ZSgpLCB2ZWN0b3I8aW50PigyLCAwKSkpOwoKICAgIGlmKChhcnJbMF1bMF0gJiAxKSkgZHBbMF1bMF1bMV0gPSAxOwogICAgZWxzZSBkcFswXVswXVswXSA9IDE7CgogICAgYm9vbCByaWdodCA9IGZhbHNlOwogICAgYm9vbCBkb3duID0gZmFsc2U7CgogICAgZm9yKGludCBpPTA7IGk8YXJyLnNpemUoKTsgaSsrKQogICAgewogICAgICAgIGZvcihpbnQgaj0wOyBqPGFyclswXS5zaXplKCk7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKGotMT49MCkgcmlnaHQgPSB0cnVlOwogICAgICAgICAgICBlbHNlIHJpZ2h0ID0gZmFsc2U7CgogICAgICAgICAgICBpZihpLTE+PTApIGRvd24gPSB0cnVlOwogICAgICAgICAgICBlbHNlIGRvd24gPSBmYWxzZTsKCiAgICAgICAgICAgIGlmKChhcnJbaV1bal0gJiAxKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYocmlnaHQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGRwW2ldW2pdWzBdICs9IGRwW2ldW2otMV1bMV07CiAgICAgICAgICAgICAgICAgIGRwW2ldW2pdWzFdICs9IGRwW2ldW2otMV1bMF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihkb3duKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgZHBbaV1bal1bMF0gKz0gZHBbaS0xXVtqXVsxXTsKICAgICAgICAgICAgICAgICAgIGRwW2ldW2pdWzFdICs9IGRwW2ktMV1bal1bMF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZihyaWdodCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZHBbaV1bal1bMF0gKz0gZHBbaV1bai0xXVswXTsKICAgICAgICAgICAgICAgICAgZHBbaV1bal1bMV0gKz0gZHBbaV1bai0xXVsxXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKGRvd24pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBkcFtpXVtqXVswXSArPSBkcFtpLTFdW2pdWzBdOwogICAgICAgICAgICAgICAgICAgZHBbaV1bal1bMV0gKz0gZHBbaS0xXVtqXVsxXTsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCAiRmluYWwgQW5zOiAtPiAiIDw8IGRwW2Fyci5zaXplKCktMV1bYXJyWzBdLnNpemUoKS0xXVswXSA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9