func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 1000000007;   const long long linf = 1LL << 62;   const unsigned long long ulinf = 1ULL << 63;   const double eps = 0.000001;   const double pi = 3.14159265358979323846;   template <class T>   T abs(T a) {     return a >= 0 ? a : -a;   }   template <class T>   T sqr(T a) {     return a * a;   }   template <class T>   T gcd(T a, T b) {     return b ? gcd(b, a % b) : a;   }   template <class T>   T mod(T a, T b) {     return (a % b + b) % b;   }   template <class T>   T addmod(T a, T b, T c) {     return (T)mod((long long)a + b, (long long)c);   }   template <class T>   T mulmod(T a, T b, T c) {     return (T)mod((long long)a * b, (long long)c);   }   template <class T>   T powmod(T a, T b, T c) {     return (T)mod(         b ? mulmod(mod(sqr((long long)powmod(a, b >> 1, c)), (long long)c),                    (b & 1LL) ? a : 1LL, (long long)c)           : 1LL,         (long long)c);   }   template <class T>   void maxe(T &a, T b) {     a = max(a, b);   }   template <class T>   void mine(T &a, T b) {     a = min(a, b);   }   template <class T>   void mode(T &a, T b) {     a = mod(a, b);   }   template <class T>   void addmode(T &a, T b, T c) {     a = addmod(a, b, c);   }   template <class T>   void mulmode(T &a, T b, T c) {     a = mulmod(a, b, c);   }   template <class T>   void powmode(T &a, T b, T c) {     a = powmod(a, b, c);   }   int iszero(double a) { return abs(a) <= eps; }   template <class T>   void geti(T &a) {     a = 0;     long long b = 1;     char c = getchar();     if (c ==  - )       b = -1;     else       a = c - 48;     while ((c = getchar()) !=     && c !=   n ) a = a * 10 + c - 48;     a *= b;   }   void fileio_in_out() {     freopen( .in ,  r , stdin);     freopen( .out ,  w , stdout);   }   void fileio_txt() {     freopen( input.txt ,  r , stdin);     freopen( output.txt ,  w , stdout);   }   const int N = 1111111;   const int M = 1111111;   int test;   long long n, m, k, ans;   long long dp[N];   long long s[N], sinv[N];   const long long md = inf;   long long c(long long a, long long b) {     return s[a] * (sinv[b] * sinv[a - b] % md) % md;   }   long long inv(long long a, long long p) { return powmod(a, p - 2, p); }   long long getans() {     if (n == 0) return k ^ (m > 1);     if (m == 0) return k ^ (n & 1);     s[0] = sinv[0] = 1;     for (long long i = 1; i <= n + m; i++) {       s[i] = s[i - 1] * i % md;       sinv[i] = sinv[i - 1] * inv(i, md) % md;     }     if (k) n--;     dp[0] = (m > 1);     for (long long i = 1; i <= n; i++)       dp[i] = (c(i + m, i) - dp[i - 1] + md) % md;     return dp[n];   }   int main() {     scanf( %I64d%I64d%I64d , &n, &m, &k);     ans = getans();     printf( %I64d n , ans);     return 0;   }   