func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 1e9 + 7;   vector<int> p;   long long dp1[555555];   long long dp2[555555];   long long fp(long long x) {     long long ret = 1;     long long mul = 2;     while (x) {       if (x & 1) {         ret *= mul;         ret %= mod;       }       mul *= mul;       mul %= mod;       x >>= 1;     }     return ret;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     p.push_back(2);     p.push_back(3);     p.push_back(5);     p.push_back(7);     p.push_back(11);     p.push_back(13);     p.push_back(17);     p.push_back(19);     p.push_back(23);     p.push_back(29);     p.push_back(31);     p.push_back(37);     p.push_back(41);     p.push_back(43);     p.push_back(47);     p.push_back(53);     p.push_back(59);     p.push_back(61);     p.push_back(67);     int k = p.size();     int cnt[80] = {};     int n;     cin >> n;     for (int i = 0; i < n; i++) {       int add;       cin >> add;       cnt[add]++;     }     dp1[0] = 1;     for (int i = 1; i < 70 + 1; i++) {       if (!cnt[i]) continue;       int shift = 0;       int rem = i;       for (int j = 0; j < k; j++) {         while (rem % p[j] == 0) {           shift ^= (1 << j);           rem /= p[j];         }       }       memset(dp2, 0, sizeof(dp2));       ;       long long add = fp(cnt[i] - 1);       for (int j = 0; j < 1 << k; j++) {         dp2[j] += dp1[j] * add % mod;         dp2[j] %= mod;         dp2[j ^ shift] += dp1[j] * add % mod;         dp2[j ^ shift] %= mod;       }       for (int j = 0; j < 1 << k; j++) {         dp1[j] = dp2[j];       }     }     cout << (dp1[0] + mod - 1) % mod << endl;   }   