func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long mod = 1000000007;   long long pow_[20];   long long binpow(long long a, long long n) {     long long res = 1;     while (n) {       if (n % 2 == 1) {         res = (a * res) % mod;       }       a = (a * a) % mod;       n /= 2;     }     return res;   }   long long C(long long n, long long k) {     long long res = 1;     n = n % mod;     for (long long i = n; i >= n - k + 1; i--) {       res = (res * i) % mod;     }     for (long long i = 1; i <= k; i++) {       res = (res * pow_[i]) % mod;     }     return res;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie();     cout.tie();     for (long long i = 1; i <= 19; i++) {       pow_[i] = binpow(i, mod - 2);     }     long long n, s;     cin >> n >> s;     vector<long long> f(n);     for (long long i = 0; i < n; i++) cin >> f[i];     long long res = 0;     for (long long mask = 0; mask < (1 << n); mask++) {       long long t = 0;       for (long long i = 0; i < n; i++) {         if (mask & (1 << i)) t++;       }       long long cur;       if (t % 2 == 0)         cur = 1;       else         cur = -1;       long long sum = 0;       for (long long i = 0; i < n; i++) {         if (mask & (1 << i)) sum += (f[i] + 1);       }       if (s - sum + n - 1 < n - 1) continue;       cur = (cur * C(s - sum + n - 1, n - 1) + mod) % mod;       res = (res + cur) % mod;     }     cout << res <<   n ;     return 0;   }   