func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, tot, m, l, r, len;   char c;   int po[400005], ha[400005], ys[400005], fi[400005], la[400005];   int s[400005], id[400005], t[400005], sum[400005], it[400005];   struct pi {     int num, hai;   };   pi find(int li, int ri) {     int f1 = 0, f2 = 0, lp = li, rp = ri;     pi tmp;     if (it[li] == it[ri]) {       if (s[li] == 1) {         if ((ri - li + 1) % 2 == 1) {           tmp.hai = (long long)2 * po[2 * n] % 1000000007;         } else           tmp.hai = 0;         tmp.num = (ri - li + 1) / 2;       } else {         tmp.num = 0;         tmp.hai = (long long)(ha[ys[ri]] - ha[ys[li] - 1] + 1000000007) %                   1000000007 * po[2 * n - ys[ri]] % 1000000007;       }       return tmp;     }     if (s[li] == 1) lp = la[lp] + 1;     if (s[ri] == 1) rp = fi[rp] - 1;     if ((lp - li) & 1) f1 = 1;     if ((ri - rp) & 1) f2 = 1;     tmp.hai = (long long)(ha[ys[rp]] - ha[ys[lp] - 1] + 1000000007) % 1000000007 *               po[2 * n - 1 - ys[rp]] % 1000000007;     tmp.num = sum[rp] - sum[lp];     tmp.num += (lp - li) / 2;     tmp.num += (ri - rp) / 2;     if (f2 == 1)       tmp.hai = (tmp.hai + (long long)2 * po[2 * n] % 1000000007) % 1000000007;     else       tmp.hai = (long long)tmp.hai * po[1] % 1000000007;     int len = ri - li + 1 - tmp.num * 2;     if (f1 == 1)       tmp.hai = (tmp.hai + (long long)2 * po[2 * n - len + 1] % 1000000007) %                 1000000007;     return tmp;   }   int main() {     scanf( %d , &n);     s[0] = -1;     s[n + 1] = -1;     for (int i = 1; i <= n; i++) {       scanf(  %c , &c);       s[i] = c -  0 ;     }     int tit = 0;     for (int i = 1; i <= n; i++) {       if (s[i] != s[i - 1])         fi[i] = i, tit++;       else         fi[i] = fi[i - 1];       it[i] = tit;     }     for (int i = n; i >= 1; i--) {       if (s[i] != s[i + 1])         la[i] = i;       else         la[i] = la[i + 1];     }     po[0] = 1;     for (int i = 1; i <= 2 * n; i++)       po[i] = (long long)po[i - 1] * 1500007 % 1000000007;     for (int i = 1; i <= n; i++) {       t[++tot] = s[i];       id[tot] = i;       if (t[tot] == 1 && t[tot - 1] == 1) tot -= 2, sum[i]++;       ys[i] = tot;     }     for (int i = 1; i <= n; i++) sum[i] += sum[i - 1];     for (int i = 1; i <= tot; i++)       ha[i] =           (ha[i - 1] + (long long)po[i] * (t[i] + 1) % 1000000007) % 1000000007;     scanf( %d , &m);     for (int i = 1; i <= m; i++) {       scanf( %d%d%d , &l, &r, &len);       pi t1 = find(l, l + len - 1), t2 = find(r, r + len - 1);       if (t1.hai == t2.hai && t1.num == t2.num)         puts( Yes );       else         puts( No );     }     return 0;   }   