func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 21;   int n;   long long s, a[N], down = 1, ans;   void exgcd(long long a, long long b, long long &x, long long &y) {     if (b == 0) {       x = 1, y = 0;       return;     }     exgcd(b, a % b, y, x);     y -= a / b * x;   }   long long inv(long long x) {     long long res, y;     exgcd(x, 1000000007, res, y);     return res;   }   long long C(long long u, long long d) {     if (d < u) return 0;     long long res = 1;     for (long long i = d; i > d - u; i--) (res *= i % 1000000007) %= 1000000007;     return res * down % 1000000007;   }   int main() {     std::ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     cin >> n >> s;     for (int i = 0; i < n; i++) cin >> a[i];     for (int i = 1; i < n; i++) (down *= i) % 1000000007;     down = inv(down);     for (int i = 0; i < (1 << n); i++) {       long long f = 1, d = s + n - 1, u = n - 1;       for (int j = 0; j < n; j++)         if (i & (1 << j)) {           d -= a[j] + 1;           f *= -1;         }       (ans += f * C(u, d)) %= 1000000007;     }     cout << (ans + 1000000007) % 1000000007;     return 0;   }   