#include <bits/stdc++.h>
using namespace std;
constexpr int MAXN = 200000, MAXLOGN = 18;
char s[MAXN + 2], t[MAXN + 2];
int rnk[MAXLOGN][MAXN + 2], suf[MAXN + 2], tmp[MAXN + 2], idx[MAXN + 2],
    nxt[MAXN + 2], prv[MAXN + 2], pre[MAXN + 2], cnt[MAXN + 2];
int reduce(int x, int m) { return x >= m ? x - m : x; }
int main() {
  int n;
  cin >> n >> s;
  for (int i = 0; i < n; i++) {
    s[i] -= '0';
    pre[i + 1] = pre[i] + s[i];
  }
  int m = 0;
  for (int i = 0, k = -1; i < n;) {
    if (s[i]) {
      int j = i;
      do prv[j++] = k;
      while (s[j]);
      if ((j ^ i) & 1) t[m++] = 1;
      i = j;
    } else {
      k = i;
      idx[i++] = m;
      t[m++] = 0;
    }
  }
  for (int i = n - 1, j = n; i >= 0; i--)
    if (s[i])
      nxt[i] = j;
    else
      j = i;
  for (int i = 0; i < m; i++) cnt[rnk[0][i] = t[i]]++;
  cnt[1] += cnt[0];
  for (int i = m - 1; i >= 0; i--) suf[--cnt[t[i]]] = i;
  int lm = 31 - __builtin_clz(m);
  for (int k = 1, c = 2; k <= lm; k++) {
    for (int i = 0; i < m; i++) {
      tmp[i] = suf[i] - (1 << k - 1);
      if (tmp[i] < 0) tmp[i] += m;
    }
    fill(cnt, cnt + c, 0);
    for (int i = 0; i < m; i++) cnt[rnk[k - 1][i]]++;
    for (int i = 1; i < c; i++) cnt[i] += cnt[i - 1];
    for (int i = m - 1; i >= 0; i--) suf[--cnt[rnk[k - 1][tmp[i]]]] = tmp[i];
    c = 0;
    rnk[k][suf[0]] = 0;
    long long prv = (long long)rnk[k - 1][suf[0]] << 32 ^
                    rnk[k - 1][reduce(suf[0] + (1 << k - 1), m)];
    for (int i = 1; i < m; i++) {
      long long cur = (long long)rnk[k - 1][suf[i]] << 32 ^
                      rnk[k - 1][reduce(suf[i] + (1 << k - 1), m)];
      if (prv != cur) ++c;
      rnk[k][suf[i]] = c;
      prv = cur;
    }
    c++;
  }
  int q;
  cin >> q;
  do {
    int l1, l2, len;
    cin >> l1 >> l2 >> len;
    --l1;
    --l2;
    int r1 = l1 + len - 1, r2 = l2 + len - 1, cnt1 = pre[r1 + 1] - pre[l1], sz,
        k;
    bool b1, b2, e1, e2;
    if (cnt1 != pre[r2 + 1] - pre[l2]) goto no;
    if (cnt1 == r1 - l1 + 1) goto yes;
    b1 = b2 = e1 = e2 = false;
    if (s[l1]) {
      b1 = (nxt[l1] ^ l1) & 1;
      l1 = nxt[l1];
    }
    if (s[l2]) {
      b2 = (nxt[l2] ^ l2) & 1;
      l2 = nxt[l2];
    }
    if (s[r1]) {
      e1 = (r1 ^ prv[r1]) & 1;
      r1 = prv[r1];
    }
    if (s[r2]) {
      e2 = (r2 ^ prv[r2]) & 1;
      r2 = prv[r2];
    }
    if (!(b1 == b2 && e1 == e2)) goto no;
    l1 = idx[l1];
    r1 = idx[r1];
    l2 = idx[l2];
    r2 = idx[r2];
    sz = r1 - l1;
    if (sz != r2 - l2) goto no;
    sz++;
    k = 31 - __builtin_clz(sz);
    if (!(rnk[k][l1] == rnk[k][l2] &&
          rnk[k][r1 + 1 - (1 << k)] == rnk[k][r2 + 1 - (1 << k)]))
      goto no;
  yes:
    cout << "YES" << '\n';
    continue;
  no:
    cout << "NO" << '\n';
  } while (--q);
}
