func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e6 + 50, M1 = 998244353, M2 = 1e9 + 7;   struct ModInt {     int x1, x2;     ModInt(int a = 0, int b = 0) : x1(a), x2(b) {}   };   ModInt operator+(ModInt a, ModInt b) {     return ModInt((a.x1 + b.x1) % M1, (a.x2 + b.x2) % M2);   }   ModInt operator-(ModInt a, ModInt b) {     return ModInt((a.x1 - b.x1 + M1) % M1, (a.x2 - b.x2 + M2) % M2);   }   ModInt operator*(ModInt a, ModInt b) {     return ModInt(1ll * a.x1 * b.x1 % M1, 1ll * a.x2 * b.x2 % M2);   }   bool operator==(ModInt a, ModInt b) { return a.x1 == b.x1 && a.x2 == b.x2; }   int n, m, sz[N], B[2];   char s[N];   ModInt h[2][N], pw[N];   ModInt f(int l, int r) {     return h[l & 1][sz[r]] - h[l & 1][sz[l - 1]] * pw[sz[r] - sz[l - 1]];   }   int main(int argc, char *argv[]) {     scanf( %d%s , &n, s + 1);     pw[0] = ModInt(1, 1), B[0] = 213, B[1] = 233;     for (int i = 1; i <= (n); ++i) {       pw[i] = pw[i - 1] * ModInt(10007, 10007);       if (s[i] ==  0 ) {         ++m;         h[0][m] = h[0][m - 1] * pw[1] + ModInt(B[i & 1], B[i & 1]);         h[1][m] = h[1][m - 1] * pw[1] + ModInt(B[(i & 1) ^ 1], B[(i & 1) ^ 1]);       }       sz[i] = m;     }     int q;     scanf( %d , &q);     while (q--) {       int l1, l2, len;       scanf( %d%d%d , &l1, &l2, &len);       puts(f(l1, l1 + len - 1) == f(l2, l2 + len - 1) ?  Yes  :  No );     }     return 0;   }   