func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 1e9 + 7;   const int INF = 2e9;   const long long int LONGINF = 4e18;   long long int inv[200200], fct[200200], invfct[200200];   long long int c[2222];   long long int C(long long int n, long long int k) {     return fct[n] * invfct[n - k] % mod * invfct[k] % mod;   }   void solve(int n) {     int m, g;     long long int c, ans = 0;     scanf( %d%d , &m, &g);     inv[1] = 1;     fct[0] = 1;     fct[1] = 1;     invfct[0] = 1;     invfct[1] = 1;     for (int i = (2); i < (200200); i++) {       inv[i] = -((long long int)mod / i * inv[mod % i] % mod) + mod;       fct[i] = fct[i - 1] * i % mod;       invfct[i] = invfct[i - 1] * inv[i] % mod;     }     if (m == 0) {       if (n % 2 == 1 - g) {         printf( 1 );       } else {         printf( 0 );       }       return;     }     c = C(n + m - 1, n);     for (int i = 0; i < (n + 1); i++) {       if (m == 1 && i == n) {         if ((n + 1) % 2 == g) {           ans++;           ans %= mod;         }         continue;       }       if (i % 2 == g) {         ans += c;         ans %= mod;       }       c = c * inv[n + m - i - 1] % mod * (n - i) % mod;       ;     }     printf( %I64d , ans);   }   int main() {   #pragma comment(linker,  /STACK:268435456 )     int n;     long long int a;     char c[200200];     string s;     while (scanf( %d , &n) == 1) solve(n);     return 0;   }   