#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int maxn = 2e5 + 10;
char s[maxn];
int n, q, sum[maxn];
std::mt19937 gen(std::chrono::system_clock::now().time_since_epoch().count());
long long custom_rand() {
  return std::uniform_int_distribution<>(2, mod - 1)(gen);
}
long long norm(long long x) {
  while (x < 0) x += mod;
  while (x >= mod) x -= mod;
  return x;
}
long long powMod(long long a, long long k) {
  long long ret = 1;
  while (k) {
    if (k & 1) ret = ret * a % mod;
    a = a * a % mod;
    k >>= 1;
  }
  return ret;
}
long long inv(long long a) { return powMod(a, mod - 2); }
struct Mat {
  long long a[2][2];
  Mat() { memset(a, 0, sizeof a); }
  Mat operator*(const Mat& rhs) {
    Mat ret;
    for (int k = 0; k < 2; ++k)
      for (int i = 0; i < 2; ++i)
        for (int j = 0; j < 2; ++j)
          ret.a[i][j] = norm(ret.a[i][j] + a[i][k] * rhs.a[k][j] % mod);
    return ret;
  };
  bool operator==(const Mat& rhs) {
    for (int i = 0; i < 2; ++i)
      for (int j = 0; j < 2; ++j)
        if (a[i][j] != rhs.a[i][j]) return 0;
    return 1;
  }
  long long det() {
    return norm(a[0][0] * a[1][1] % mod - a[0][1] * a[1][0] % mod);
  }
  void random_init() {
    do {
      for (int i = 0; i < 2; ++i)
        for (int j = 0; j < 2; ++j) a[i][j] = custom_rand();
    } while (!det());
  }
  Mat minv() {
    Mat ret;
    long long detinv = inv(det());
    assert(detinv);
    ret.a[0][0] = a[1][1] * detinv % mod;
    ret.a[1][1] = a[0][0] * detinv % mod;
    ret.a[0][1] = (mod - a[0][1]) * detinv % mod;
    ret.a[1][0] = (mod - a[1][0]) * detinv % mod;
    return ret;
  }
} M[maxn], invM[maxn];
int main() {
  long long r = custom_rand();
  Mat A;
  A.a[0][0] = r;
  A.a[1][1] = mod - r;
  Mat B;
  B.random_init();
  scanf("%d", &n);
  scanf("%s", s + 1);
  M[0].a[0][0] = M[0].a[1][1] = invM[0].a[0][0] = invM[0].a[1][1] = 1;
  for (int i = 1; i <= n; ++i) {
    sum[i] = sum[i - 1] + (s[i] == '1');
    M[i] = (s[i] == '1') ? A : B;
    M[i] = M[i - 1] * M[i];
    invM[i] = M[i].minv();
  }
  scanf("%d", &q);
  for (int cas = 1; cas <= q; ++cas) {
    int l, r, len;
    scanf("%d%d%d", &l, &r, &len);
    if (sum[l + len - 1] - sum[l - 1] == sum[r + len - 1] - sum[r - 1] &&
        invM[l - 1] * M[l + len - 1] == invM[r - 1] * M[r + len - 1])
      puts("Yes");
    else
      puts("No");
  }
  return 0;
}
