#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5;
char s[MAXN + 5];
int n, num[MAXN + 5], id[MAXN + 5], cnt, pos[MAXN + 5], pre[MAXN + 5],
    nxt[MAXN + 5], a[MAXN + 5];
namespace SuffixArray {
const int INF = 1e9;
int sa[MAXN + 5], rk[MAXN + 5], x[MAXN + 5], y[MAXN + 5], c[MAXN + 5],
    ht[MAXN + 5], st[MAXN + 5][20], log2[MAXN + 5];
void init(int n, int *a) {
  int m = 2;
  for (int i = 1; i <= n; ++i) c[x[i] = a[i]]++;
  for (int i = 1; i <= m; ++i) c[i] += c[i - 1];
  for (int i = n; i >= 1; --i) sa[c[x[i]]--] = i;
  for (int k = 1; k <= n; k <<= 1) {
    int num = 0;
    for (int i = n - k + 1; i <= n; ++i) y[++num] = i;
    for (int i = 1; i <= n; ++i)
      if (sa[i] > k) y[++num] = sa[i] - k;
    for (int i = 1; i <= m; ++i) c[i] = 0;
    for (int i = 1; i <= n; ++i) c[x[i]]++;
    for (int i = 1; i <= m; ++i) c[i] += c[i - 1];
    for (int i = n; i >= 1; --i) sa[c[x[y[i]]]--] = y[i];
    for (int i = 1; i <= n; ++i) swap(x[i], y[i]);
    x[sa[1]] = 1;
    num = 1;
    for (int i = 2; i <= n; ++i) {
      x[sa[i]] = (y[sa[i]] == y[sa[i - 1]] && y[sa[i] + k] == y[sa[i - 1] + k])
                     ? num
                     : ++num;
    }
    if (num == n) break;
    m = num;
  }
  for (int i = 1; i <= n; ++i) rk[sa[i]] = i;
  for (int i = 1, k = 0; i <= n; ++i) {
    if (rk[i] == 1) continue;
    if (k) --k;
    int j = sa[rk[i] - 1];
    while (i + k <= n && j + k <= n && a[i + k] == a[j + k]) ++k;
    ht[rk[i]] = k;
  }
  for (int i = 1; i <= n; ++i) st[i][0] = ht[i];
  for (int j = 1; j <= 19; ++j) {
    for (int i = 1; i + (1 << (j - 1)) <= n; ++i) {
      st[i][j] = min(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
    }
  }
  log2[0] = -1;
  for (int i = 1; i <= n; ++i) log2[i] = log2[i >> 1] + 1;
}
inline int lcp(int i, int j) {
  if (i == j) return INF;
  int l = rk[i], r = rk[j];
  if (l > r) swap(l, r);
  ++l;
  int k = log2[r - l + 1];
  return min(st[l][k], st[r - (1 << k) + 1][k]);
}
}  // namespace SuffixArray
int main() {
  scanf("%d%s", &n, s + 1);
  for (int i = 1, _pre = 0; i <= n; ++i)
    if (s[i] == '0')
      id[i] = ++cnt, pos[cnt] = i, pre[i] = _pre = i, num[i] = num[i - 1] + 1;
    else
      pre[i] = _pre, num[i] = num[i - 1];
  for (int i = n, _nxt = 0; i >= 1; --i)
    if (s[i] == '0')
      nxt[i] = _nxt = i;
    else
      nxt[i] = _nxt;
  for (int i = 1; i <= cnt; ++i) a[i] = ((pos[i] - pos[i - 1] - 1) & 1) + 1;
  SuffixArray::init(cnt, a);
  int m;
  scanf("%d", &m);
  while (m--) {
    int l1, l2, len;
    scanf("%d%d%d", &l1, &l2, &len);
    if (l1 == l2) {
      puts("Yes");
      continue;
    }
    if (num[l1 + len - 1] - num[l1 - 1] != num[l2 + len - 1] - num[l2 - 1]) {
      puts("No");
      continue;
    }
    if (num[l1 + len - 1] - num[l1 - 1] == 0) {
      puts("Yes");
      continue;
    }
    assert(nxt[l1]);
    assert(nxt[l2]);
    if (((nxt[l1] - l1) & 1) != ((nxt[l2] - l2) & 1)) {
      puts("No");
      continue;
    }
    if (num[l1 + len - 1] - num[l1 - 1] == 1) {
      puts("Yes");
      continue;
    }
    int i1 = id[nxt[l1]] + 1, j1 = id[pre[l1 + len - 1]];
    assert(i1 <= cnt);
    assert(i1 <= j1);
    int i2 = id[nxt[l2]] + 1;
    assert(i2 <= cnt);
    if (SuffixArray::lcp(i1, i2) >= j1 - i1 + 1)
      puts("Yes");
    else
      puts("No");
  }
  return 0;
}
