func_code_string: #include <bits/stdc++.h>   using namespace std;   long long int fact[2000005], ifact[2000005];   long long int ppow(long long int b, int p) {     long long int ret = 1;     for (; p; p /= 2) {       if (p & 1) ret = (ret * b) % 1000000007;       b = (b * b) % 1000000007;     }     return ret;   }   void init_fact() {     fact[0] = 1;     for (int i = 1; i < 2000005; i++) fact[i] = (fact[i - 1] * i) % 1000000007;     ifact[2000005 - 1] = ppow(fact[2000005 - 1], 1000000007 - 2);     for (int i = 2000005 - 2; i >= 0; i--)       ifact[i] = (ifact[i + 1] * (i + 1)) % 1000000007;   }   int main() {     init_fact();     int n, m, g;     scanf( %d%d%d , &n, &m, &g);     long long int ans = 0;     if (n == 0) {       if (m == 1 and g == 1)         ans = 1;       else if (m > 1 and g == 0)         ans = 1;     } else if (m == 0) {       if (n == 1 and g == 0)         ans = 1;       else if (n > 1) {         if (n % 2 == 0 and g == 1)           ans = 1;         else if (n % 2 == 1 and g == 0)           ans = 1;       }     } else {       for (int start = 1; start <= n + 1; start++) {         if (start == n + 1 and m == 1) {           if (g == 0 and (n + m) % 2 == 0)             ans++;           else if (g == 1 and (n + m) % 2 == 1)             ans++;           continue;         }         if ((start + g) & 1) {           long long int val = fact[m - 1 + n - start + 1];           val = (val * ifact[m - 1]) % 1000000007;           val = (val * ifact[n - start + 1]) % 1000000007;           ans = (ans + val) % 1000000007;         }       }     }     cout << ans % 1000000007 << endl;   }   