#include <bits/stdc++.h>
using namespace std;
using db = double;
using ll = long long;
using uint = unsigned int;
using pii = pair<int, int>;
template <class T>
void cmax(T& x, const T& y) {
  if (x < y) x = y;
}
template <class T>
void cmin(T& x, const T& y) {
  if (x > y) x = y;
}
template <class T>
void sort(vector<T>& v) {
  sort(v.begin(), v.end());
}
template <class T>
void reverse(vector<T>& v) {
  reverse(v.begin(), v.end());
}
template <class T>
void unique(vector<T>& v) {
  sort(v.begin(), v.end()), v.erase(unique(v.begin(), v.end()), v.end());
}
const int SZ = 1 << 23 | 233;
struct FILEIN {
  char qwq[SZ], *S = qwq, *T = qwq, ch;
  char GETC() {
    return (S == T) && (T = (S = qwq) + fread(qwq, 1, SZ, stdin), S == T)
               ? EOF
               : *S++;
  }
  FILEIN& operator>>(char& c) {
    while (isspace(c = GETC()))
      ;
    return *this;
  }
  FILEIN& operator>>(string& s) {
    while (isspace(ch = GETC()))
      ;
    s = ch;
    while (!isspace(ch = GETC())) s += ch;
    return *this;
  }
  template <class T>
  void read(T& x) {
    bool sign = 0;
    while ((ch = GETC()) < 48) sign ^= (ch == 45);
    x = (ch ^ 48);
    while ((ch = GETC()) > 47) x = (x << 1) + (x << 3) + (ch ^ 48);
    x = sign ? -x : x;
  }
  FILEIN& operator>>(int& x) { return read(x), *this; }
  FILEIN& operator>>(ll& x) { return read(x), *this; }
} in;
struct FILEOUT {
  const static int LIMIT = 1 << 22;
  char quq[SZ], ST[233];
  int sz, O;
  ~FILEOUT() { flush(); }
  void flush() {
    fwrite(quq, 1, O, stdout);
    fflush(stdout);
    O = 0;
  }
  FILEOUT& operator<<(char c) { return quq[O++] = c, *this; }
  FILEOUT& operator<<(string str) {
    if (O > LIMIT) flush();
    for (char c : str) quq[O++] = c;
    return *this;
  }
  template <class T>
  void write(T x) {
    if (O > LIMIT) flush();
    if (x < 0) {
      quq[O++] = 45;
      x = -x;
    }
    do {
      ST[++sz] = x % 10 ^ 48;
      x /= 10;
    } while (x);
    while (sz) quq[O++] = ST[sz--];
  }
  FILEOUT& operator<<(int x) { return write(x), *this; }
  FILEOUT& operator<<(ll x) { return write(x), *this; }
} out;
mt19937 rnd(chrono ::steady_clock ::now().time_since_epoch().count());
const long long maxn = 2e5 + 52;
const long long bs = rnd() % 19260817 | 3;
const long long mod = 1213153189;
long long n;
char a[maxn];
long long p[maxn];
long long cnt[maxn], h1[maxn], h2[maxn];
long long qry(long long l, long long r) {
  if (l & 1)
    return (h1[r] - h1[l - 1] * p[cnt[r] - cnt[l - 1]] % mod + mod) % mod;
  else
    return (h2[r] - h2[l - 1] * p[cnt[r] - cnt[l - 1]] % mod + mod) % mod;
}
signed main() {
  scanf("%lld", &n);
  scanf("%s", a + 1);
  p[0] = 1;
  for (long long i = 1; i <= n; i++) {
    p[i] = p[i - 1] * bs % mod;
    cnt[i] = cnt[i - 1] + (a[i] == '0');
    if (a[i] == '0') {
      h1[i] = (h1[i - 1] * bs + (i & 1) + 1) % mod;
      h2[i] = (h2[i - 1] * bs + (i & 1 ^ 1) + 1) % mod;
    } else {
      h1[i] = h1[i - 1];
      h2[i] = h2[i - 1];
    }
  }
  long long q;
  scanf("%lld", &q);
  while (q--) {
    long long l, r, len;
    scanf("%lld %lld %lld", &l, &r, &len);
    if (qry(l, l + len - 1) == qry(r, r + len - 1))
      out << "Yes" << '\n';
    else
      out << "No" << '\n';
  }
  return 0;
}
