func_code_string: #include <bits/stdc++.h>   #pragma GCC target( avx2 )   #pragma GCC optimization( O3 )   #pragma GCC optimization( unroll-loops )   using namespace std;   template <class T1, class T2>   ostream &operator<<(ostream &os, const pair<T1, T2> &p) {     os <<  {  << p.first <<  ,  << p.second <<  } ;     return os;   }   const int N = 3e5 + 5;   const int oo = 1e9 + 7;   const int LOGN = 30;   long long bigmod(long long a, long long p, long long m) {     long long res = 1;     long long x = a;     while (p) {       if (p & 1) {         res = (res * x) % m;       }       x = (x * x) % m;       p = p >> 1;     }     return res;   }   int basis[N][LOGN];   void insert_vec(int t, int x) {     for (int i = LOGN - 1; i >= 0; i--) basis[t][i] = basis[t - 1][i];     for (int i = LOGN - 1; i >= 0; i--) {       if ((x >> i) & 1) {         if (!basis[t][i]) {           basis[t][i] = x;           return;         } else {           x ^= basis[t][i];         }       }     }   }   int ans(int t, int x) {     int tot = t;     for (int i = LOGN - 1; i >= 0; i--) {       if (basis[t][i]) {         tot--;         if ((x >> i) & 1) x ^= basis[t][i];       } else {         if ((x >> i) & 1) return 0;       }     }     return bigmod(2, tot, oo);   }   int32_t main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     int n, q;     cin >> n >> q;     for (int i = 1; i <= n; i++) {       int x;       cin >> x;       insert_vec(i, x);     }     while (q--) {       int l, x;       cin >> l >> x;       cout << ans(l, x) <<   n ;     }   }   