func_code_string: #include <bits/stdc++.h>   using namespace std;   long long f[25], ny[40], ff[40];   int vis[2100000];   int n;   long long s;   long long ans = 0;   void pre() {     ny[0] = ny[1] = ff[0] = ff[1] = 1;     for (int i = 2; i < 39; i++) {       long long t = 1000000007 / i, k = 1000000007 % i;       ff[i] = i * t % 1000000007 * t % 1000000007 * ff[k] % 1000000007 * ff[k] %               1000000007;       ny[i] = ny[i - 1] * ff[i] % 1000000007;     }   }   long long C(long long a, long long b) {     if (a < b) return 0;     long long cur = 1;     for (int i = 0; i < b; i++) cur = cur * ((a - i) % 1000000007) % 1000000007;     cur = cur * ny[b] % 1000000007;     return cur;   }   void dfs(int st, long long sum, int zf) {     if (vis[st]) return;     vis[st] = 1;     long long cur =         (zf * C(s - sum + n - 1, n - 1) % 1000000007 + 1000000007) % 1000000007;     ans = (ans + cur) % 1000000007;     if (st == ((1 << n) - 1)) return;     for (int i = 0; i < n; i++)       if ((st & (1 << i)) == 0) {         dfs(st | (1 << i), sum + f[i] + 1, -zf);       }   }   int main() {     pre();     scanf( %d%I64d , &n, &s);     for (int i = 0; i < n; i++) scanf( %I64d , &f[i]);     dfs(0, 0, 1);     printf( %I64d n , ans);   }   