#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0;
  char ch = getchar();
  bool f = 0;
  for (; ch < '0' || ch > '9'; ch = getchar())
    if (ch == '-') f = 1;
  for (; ch >= '0' && ch <= '9'; ch = getchar())
    x = (x << 3) + (x << 1) + (ch ^ 48);
  return f ? -x : x;
}
const long long mod = 998244353;
const long long base = 29;
inline long long Add(long long x, long long y) {
  x += y;
  return (x < mod) ? x : x - mod;
}
inline long long Dec(long long x, long long y) {
  x -= y;
  return (x < 0) ? x + mod : x;
}
inline long long Mul(long long x, long long y) { return x * y % mod; }
inline long long Pow(long long x, long long y) {
  y %= (mod - 1);
  long long ans = 1;
  for (; y; y >>= 1, x = x * x % mod)
    if (y & 1) ans = ans * x % mod;
  return ans;
}
const int N = 4e5 + 10;
long long p[N], h[N];
char s[N];
int q[N], sum[N], n, m;
inline void print(bool x) { puts(x ? "Yes" : "No"); }
int main() {
  n = read();
  scanf("%s", s + 1);
  p[0] = 1;
  for (int i = (1), end_i = (n + 1); i <= end_i; i++)
    p[i] = p[i - 1] * base % mod;
  for (int i = (1), end_i = (n); i <= end_i; i++)
    if (s[i] == '0') q[++m] = i;
  int t = 0, las = -1;
  for (int i = (1), end_i = (n); i <= end_i; i++) {
    sum[i] = sum[i - 1] + (s[i] == '0');
    h[i] = h[i - 1];
    if (s[i] == '0') {
      t++;
      h[i] = Add(h[i], ((i - las) % 2 == 0 ? 2ll : 1ll) * p[t] % mod);
      las = i;
    }
  }
  q[++m] = n + 1;
  int lx, ly, rx, ry, len, Lx, Ly, Rx, Ry;
  for (int ___ = (1), end_i = (read()); ___ <= end_i; ___++) {
    lx = read();
    ly = read();
    len = read();
    if (lx > ly) swap(lx, ly);
    rx = lx + len - 1;
    ry = ly + len - 1;
    if (len == 1) {
      print(s[lx] == s[ly]);
      continue;
    }
    if (sum[rx] - sum[lx - 1] != sum[ry] - sum[ly - 1]) {
      print(0);
      continue;
    }
    if (sum[rx] - sum[lx - 1] == 0 || sum[rx] - sum[lx - 1] == len) {
      print(1);
      continue;
    }
    Lx = q[lower_bound(q + 1, q + m + 1, lx) - q];
    Rx = q[upper_bound(q + 1, q + m + 1, rx) - q - 1];
    Ly = q[lower_bound(q + 1, q + m + 1, ly) - q];
    Ry = q[upper_bound(q + 1, q + m + 1, ry) - q - 1];
    if (((Lx - lx) % 2 != (Ly - ly) % 2) || ((rx - Rx) % 2 != (ry - Ry) % 2)) {
      print(0);
      continue;
    }
    print((h[Rx] - h[Lx] + mod) % mod * p[sum[Ly] - sum[Lx]] % mod ==
          (h[Ry] - h[Ly] + mod) % mod);
  }
  return 0;
}
