func_code_string: #include <bits/stdc++.h>   using namespace std;   long long vis[80];   long long prime[80] = {0};   long long a[200000];   long long fc[80][200000] = {{0}};   int n;   int pnum;   int get_primes(int m) {     memset(vis, 0, sizeof(vis));     int cnt = 1;     for (int i = 2; i < m; i++) {       if (!vis[i]) {         prime[cnt++] = i;         for (int j = i * i; j < m; j += i) vis[j] = 1;       }     }     return cnt;   }   void change(long long k, long long g) {     for (int i = 1; i <= pnum;) {       if (k % prime[i] == 0) {         fc[i][g] ^= 1;         k /= prime[i];       } else         i++;     }     return;   }   long long gauss() {     long long g = 0;     int i, j;     for (j = 1; j <= n && g < pnum; j++) {       for (i = g + 1; i <= pnum; i++)         if (fc[i][j] == 1) break;       if (i <= pnum) {         g++;         for (int p = j; p <= n; p++) swap(fc[g][p], fc[i][p]);         for (int p = g + 1; p <= pnum; p++) {           if (fc[p][j] == 1) {             for (int q = j; q <= n; q++) fc[p][q] ^= fc[g][q];           }         }       }     }     return g;   }   long long qpow(long long a, long long b, long long m) {     long long ans = 1;     while (b) {       if (b & 1) {         ans = (ans * a) % m;         b--;       }       b /= 2;       a = a * a % m;     }     return ans;   }   int main() {     int cas = 1;     int t = 1;     get_primes(70);     pnum = 19;     {       memset(fc, 0, sizeof(fc));       cin >> n;       for (int i = 1; i <= n; i++) cin >> a[i], change(a[i], i);       int r = gauss();       long long ans = qpow(2, (long long)(n - r), 1000000007) - 1;       printf( %lld n , ans);     }   }   