#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
long long MOD = 1e9 + 7;
inline long long mod(long long x_) { return (x_) % MOD; }
long long modpow(long long x_, long long N_) {
  if (N_ == 0) return 1;
  long long a = modpow(x_, N_ / 2);
  a = (a * a) % MOD;
  if (N_ % 2) a = (a * x_) % MOD;
  return a;
}
long long inv(long long x_) { return modpow(x_, MOD - 2); }
class mi {
 public:
  mi(long long v = 0) { value = v; }
  mi operator+(long long rs) { return mod(value + rs); }
  mi operator-(long long rs) { return mod(value - rs + MOD); }
  mi operator*(long long rs) { return mod(value * rs); }
  mi operator/(long long rs) { return mod(value * inv(rs)); }
  mi& operator+=(long long rs) {
    *this = (*this) + rs;
    return *this;
  }
  mi& operator-=(long long rs) {
    *this = (*this) - rs;
    return *this;
  }
  mi& operator*=(long long rs) {
    *this = (*this) * rs;
    return *this;
  }
  mi& operator/=(long long rs) {
    *this = (*this) / rs;
    return *this;
  }
  operator long long&() { return value; }
  operator const long long&() const { return value; }
  long long value;
};
void program();
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  program();
}
const int MX = 3e5;
int n, q;
string t;
int cnt[MX];
int start = 0;
long long seed;
long long invSeed;
mi modPowSeed[MX];
struct State {
  int l = 0, r = 0, length = 0;
  mi hash = 0;
  void print() {
    cout << l << " " << r << " " << length << " " << hash << endl;
  }
  bool operator!=(const State& O) const {
    return l != O.l || r != O.r || length != O.length || hash != O.hash;
  }
};
State merge(State L, State R) {
  if (L.r == 1 && R.l == 1) {
    L.length--;
    R.length--;
    R.hash *= invSeed;
    L.r = 0;
    R.l = 0;
    if (L.length == 0) L.l = 0;
    if (R.length == 0) R.r = 0;
  }
  if (R.length != 0 && L.length != 1 && L.r) {
    L.hash += modPowSeed[L.length - 1];
  }
  if (L.length != 0 && R.length != 1 && R.l) {
    R.hash += 1LL;
  }
  State n;
  n.l = L.l;
  n.r = R.r;
  if (L.length == 0) n.l = R.l;
  if (R.length == 0) n.r = L.r;
  n.length = L.length + R.length;
  n.hash = L.hash + R.hash * modPowSeed[L.length];
  return n;
}
State SEG[MX * 4];
void buildSeg(int p = 0, int l = 0, int r = n - 1) {
  if (l == r) {
    SEG[p].length = 1;
    SEG[p].l = t[l];
    SEG[p].r = t[l];
    SEG[p].hash = 0;
    return;
  }
  int m = (l + r) / 2;
  buildSeg(p * 2 + 1, l, m);
  buildSeg(p * 2 + 2, m + 1, r);
  SEG[p] = merge(SEG[p * 2 + 1], SEG[p * 2 + 2]);
}
State getSeg(int i, int j, int p = 0, int l = 0, int r = n - 1) {
  if (j < l || i > r) return {};
  if (i <= l && j >= r) return SEG[p];
  int m = (l + r) / 2;
  State a = getSeg(i, j, p * 2 + 1, l, m);
  State b = getSeg(i, j, p * 2 + 2, m + 1, r);
  return merge(a, b);
}
void program() {
  cin >> n >> t;
  for (int i = int(0); i < int(n); i++) t[i] -= '0';
  cnt[0] = 0;
  for (int i = int(0); i < int(n); i++) cnt[i + 1] = cnt[i] + t[i];
  seed = 2;
  invSeed = inv(seed);
  modPowSeed[0] = 1;
  for (int i = int(1); i < int(n + 1); i++)
    modPowSeed[i] = modPowSeed[i - 1] * seed;
  buildSeg();
  cin >> q;
  for (int i = int(0); i < int(q); i++) {
    int l1, l2, len;
    cin >> l1 >> l2 >> len;
    l1--;
    l2--;
    bool pos = 1;
    if (cnt[l1 + len] - cnt[l1] != cnt[l2 + len] - cnt[l2]) pos = 0;
    if (getSeg(l1, l1 + len - 1) != getSeg(l2, l2 + len - 1)) pos = 0;
    cout << (pos ? "Yes" : "No") << endl;
  }
}
