func_code_string: #include <bits/stdc++.h>   using namespace std;   long long int dp[(1ll << 19)][19];   long long int n, T;   long long int t[19], g[19];   long long int ans = 0;   long long int solve(long long int mask, long long int cnt, long long int last) {     if (cnt > T) return 0;     if (cnt == T) return 1;     if (dp[mask][last] != -1) return dp[mask][last];     long long int res = 0;     for (long long int i = 0; i < n; i++) {       if ((mask & (1 << i)) == 0 && g[i] != last) {         res += solve(mask | (1 << i), cnt + t[i], g[i]);         res %= 1000000007;       }     }     return dp[mask][last] = res;   }   int32_t main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     memset(dp, -1, sizeof dp);     cin >> n >> T;     long long int i;     for (i = 0; i < n; i++) {       cin >> t[i] >> g[i];     }     ans = solve(0, 0, 0);     cout << ans;   }   