func_code_string: #include <bits/stdc++.h>   using namespace std;   inline long long int __gcd(long long int a, long long int b);   void pdash(int n = 1);   int bitcount(long long int u);   long long int power(long long int x, long long int y);   long long int power(long long int x, long long int y, long long int z);   long long int modInverse(long long int n, long long int p);   long long int nCrF(long long int n, long long int r, long long int p);   void cordinate_compression(vector<int>& v);   void make_unique(vector<int>& vec);   const long long int mod = 1e9 + 7;   void solve() {     int n, q;     cin >> n >> q;     string str;     cin >> str;     vector<int> vec(n);     for (int i = 0; i < n; i++) {       vec[i] = (str[i] -  0 );     }     for (int i = 1; i < n; i++) {       vec[i] += vec[i - 1];     }     while (q--) {       int zero, one;       int a, b;       cin >> a >> b;       a--;       b--;       one = vec[b] - (((a - 1) >= 0) ? vec[a - 1] : 0);       zero = (b - a) + 1 - one;       cout << ((power(2, zero, mod) * ((power(2, one, mod) - 1 + mod) % mod)) %                mod)            <<   n ;     }   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     int t = 1;     while (t--) {       solve();     }   }   inline long long int __gcd(long long int a, long long int b) {     if (a == 0 || b == 0) {       return max(a, b);     }     long long int tempa, tempb;     while (1) {       if (a % b == 0)         return b;       else {         tempa = a;         tempb = b;         a = tempb;         b = tempa % tempb;       }     }   }   void pdash(int n) {     for (int i = 0; i < n; i++) {       for (int j = 0; j < 30; j++) {         cout <<  - ;       }       cout <<   n ;     }   }   long long int power(long long int x, long long int y) {     long long int result = 1;     while (y > 0) {       if (y & 1) {         result = (result * x);       }       y = y >> 1;       x = (x * x);     }     return result;   }   long long int power(long long int x, long long int y, long long int z) {     long long int result = 1;     x = x % z;     while (y > 0) {       if (y & 1) {         result = (result * x) % z;       }       y = y >> 1;       x = (x * x) % z;     }     return result;   }   long long int modInverse(long long int n, long long int p) {     return power(n, p - 2, p);   }   long long int nCrF(long long int n, long long int r, long long int p) {     if (r == 0) return 1;     long long int f[n + 1];     f[0] = 1;     for (long long int i = 1; i <= n; i++) f[i] = f[i - 1] * i % p;     return (f[n] * modInverse(f[r], p) % p * modInverse(f[n - r], p) % p) % p;   }   void cordinate_compression(vector<int>& v) {     vector<int> p = v;     make_unique(p);     for (int i = 0; i < (int)((v).size()); i++)       v[i] = (int)(lower_bound(p.begin(), p.end(), v[i]) - p.begin());   }   void make_unique(vector<int>& vec) {     sort(vec.begin(), vec.end());     vec.erase(unique(vec.begin(), vec.end()), vec.end());   }   int bitcount(long long int u) {     int cnt = 0;     while (u) {       u = u & (u - 1);       cnt++;     }     return cnt;   }   