#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mx = 200001;
const ll mod = 1000000007;
vector<ll> power2(mx, 1);
ll smallest_power_of_two_larger_than(const ll x) {
  ll power2 = x - 1;
  power2 |= power2 >> 1;
  power2 |= power2 >> 2;
  power2 |= power2 >> 4;
  power2 |= power2 >> 8;
  power2 |= power2 >> 16;
  return power2 + 1;
}
struct Node {
  ll length, even_count, uneven_pos;
  ll L, R;
  bool operator==(const Node r) const {
    return length == r.length && even_count == r.even_count &&
           uneven_pos == r.uneven_pos;
  }
};
Node merge(Node l, Node r) {
  if (l.length == 0) return r;
  if (r.length == 0) return l;
  if (l.R + 1 == l.length + r.L) {
    l.uneven_pos = (l.uneven_pos - power2[l.length - 1] + mod) % mod;
    r.uneven_pos = (r.uneven_pos - power2[2 * r.even_count] + mod) % mod;
    r.even_count++;
    l.R = -mx;
    r.L = mx;
    if (l.length == 1) l.L = mx;
    if (r.length == 1) r.R = -mx;
  }
  return {l.length + r.length, l.even_count + r.even_count,
          (l.uneven_pos * power2[2 * r.even_count] +
           r.uneven_pos * power2[l.length]) %
              mod,
          min(l.L, r.L + l.length - 2 * l.even_count),
          max(l.R + 2 * r.even_count, r.R + l.length)};
}
vector<Node> tree;
ll sz;
Node calc(ll from, ll to, ll node_min = 0, ll node_max = sz - 1, ll node = 1) {
  if (to < node_min || node_max < from) {
    return {0, 0, 0, false, false};
  } else if (from <= node_min && node_max <= to) {
    return tree[node];
  } else {
    ll d = (node_min + node_max) / 2;
    return merge(calc(from, to, node_min, d, 2 * node),
                 calc(from, to, d + 1, node_max, 2 * node + 1));
  }
}
int main() {
  for (ll i = 1; i < power2.size(); i++) power2[i] = (power2[i - 1] << 1) % mod;
  ll n;
  string s;
  cin >> n >> s;
  sz = smallest_power_of_two_larger_than(n);
  tree = vector<Node>(2 * sz);
  for (ll i = 0; i < sz; i++) {
    if (i < n && s[i] == '1') {
      tree[i + sz] = {1, 0, power2[0], 0, 0};
    } else {
      tree[i + sz] = {1, 0, 0, mx, -mx};
    }
  }
  for (ll i = sz - 1; i > 0; i--) {
    tree[i] = merge(tree[2 * i], tree[2 * i + 1]);
  }
  ll q;
  cin >> q;
  for (ll i = 0; i < q; i++) {
    ll l1, l2, len;
    cin >> l1 >> l2 >> len;
    Node l = calc(l1 - 1, l1 + len - 2);
    Node r = calc(l2 - 1, l2 + len - 2);
    if (l == r) {
      cout << "Yes" << endl;
    } else {
      cout << "No" << endl;
    }
  }
}
