3
#define lld long long int5
int mul(lld a, lld b) {6
lld product = (a * b) % MOD;10
int add(lld a, lld b) {11
lld addition = (a + b) % MOD;15
const int MOD = 1e9 + 7;16
int binary_exponentiation(lld x, int p) {19
if (p & 1) res = mul(res, x);26
int goodSubsets(int pos, int mask, vector<int> &V, vector<vector<int>> &dp, vector<int> &cache) {27
if (pos == V.size()) return (mask > 0);29
if (dp[pos][mask] != -1) return dp[pos][mask] % MOD;31
if (V[pos] & mask) return dp[pos][mask] = goodSubsets(pos + 1, mask, V, dp, cache) % MOD;32
return dp[pos][mask] =33
add(mul(cache[V[pos]], goodSubsets(pos + 1, mask | V[pos], V, dp, cache)),34
goodSubsets(pos + 1, mask, V, dp, cache));37
int numberOfGoodSubsets(vector<int> &nums) {38
int primes[10] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};41
vector<int> cache(1025, 0);49
for (auto j : primes) {62
if (cnt == 1) num = num | (1 << k);67
if (flag == 0) continue;75
if (cache[num] > 1) continue;80
vector<vector<int>> dp(V.size(), vector<int>(1024, -1));82
int ans = goodSubsets(0, 0, V, dp, cache);83
ans = mul(binary_exponentiation(2, ones), ans);