#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
const int mod1 = 1e9 + 7;
const int mod2 = 998244353;
long long f1[maxn], f2[maxn];
long long v[maxn], p[maxn];
char s[maxn];
void init(int n) {
  p[0] = 1;
  for (int i = 1; i <= n; i++) {
    p[i] = p[i - 1] * 3 % mod1;
  }
}
int main() {
  int n, now = 0;
  scanf("%d", &n);
  init(n);
  scanf("%s", s + 1);
  for (int i = 1; i <= n; i++) {
    if (s[i] == '0') v[++now] = i;
  }
  for (int i = 1; i <= now; i++) {
    int id = v[i];
    if (id & 1) {
      f1[i] = (f1[i - 1] + 2 * p[i - 1]) % mod1;
      f2[i] = (f2[i - 1] + p[i - 1]) % mod1;
    } else {
      f1[i] = (f1[i - 1] + p[i - 1]) % mod1;
      f2[i] = (f2[i - 1] + 2 * p[i - 1]) % mod1;
    }
  }
  int m;
  scanf("%d", &m);
  while (m--) {
    int x, y, len;
    scanf("%d%d%d", &x, &y, &len);
    if (x > y) swap(x, y);
    int l1 = lower_bound(v + 1, v + 1 + now, x) - v - 1;
    int r1 = upper_bound(v + 1, v + 1 + now, x + len - 1) - v - 1;
    int l2 = lower_bound(v + 1, v + 1 + now, y) - v - 1;
    int r2 = upper_bound(v + 1, v + 1 + now, y + len - 1) - v - 1;
    if (l1 >= r1 && l2 >= r2)
      printf("YES\n");
    else if (l1 >= r1 || l2 >= r2)
      printf("NO\n");
    else {
      long long res1 = 0, res2 = 0;
      if (x & 1) {
        res1 = (f1[r1] - f1[l1] + mod1) % mod1;
      } else
        res1 = (f2[r1] - f2[l1] + mod1) % mod1;
      if (y & 1) {
        res2 = (f1[r2] - f1[l2] + mod1) % mod1;
      } else
        res2 = (f2[r2] - f2[l2] + mod1) % mod1;
      res1 = res1 * p[l2 - l1] % mod1;
      if (res1 == res2)
        printf("YES\n");
      else
        printf("NO\n");
    }
  }
}
