#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
struct Hash {
  vector<long long> xp, hval;
  long long mod;
  void init(const string &str, long long _mod) {
    mod = _mod;
    const int BASE = 2;
    int len = str.size();
    xp.resize(len + 1);
    hval.resize(len + 1);
    xp[0] = 1;
    for (int i = 1; i <= len; i++) {
      xp[i] = xp[i - 1] * BASE % mod;
    }
    hval[len] = 0;
    for (int i = len - 1; i >= 0; i--) {
      hval[i] = (hval[i + 1] * BASE + (long long)str[i]) % mod;
    }
  }
  long long get(int l, int r) {
    return ((hval[l] - hval[r + 1] * xp[r - l + 1]) % mod + mod) % mod;
  }
  long long take_inv(long long val, int len) {
    return ((xp[len] - 1 - val) % mod + mod) % mod;
  }
} hs[10];
int n, qn, cnt0[MAXN], cnt1[MAXN];
vector<int> occ;
string second, zlist;
vector<long long> mods = {998244353, 1000000007, 1000000009};
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  mt19937 rng(time(NULL));
  mods.push_back((rng() % mods[1] + mods[1]) % mods[1] + 1);
  mods.push_back((rng() % mods[1] + mods[1]) % mods[1] + 1);
  cin >> n >> second >> qn;
  for (int i = 1; i <= n; i++) {
    cnt0[i] = cnt0[i - 1] + (second[i - 1] == '0');
    cnt1[i] = cnt1[i - 1] + (second[i - 1] == '1');
    if (second[i - 1] == '0') {
      occ.push_back(i);
      zlist.push_back(cnt1[i] % 2);
    }
  }
  for (int i = 0; i < mods.size(); i++) {
    hs[i].init(zlist, mods[i]);
  }
  for (int i = 0; i < qn; i++) {
    int l1, l2, r1, r2, len;
    cin >> l1 >> l2 >> len;
    r1 = l1 + len - 1;
    r2 = l2 + len - 1;
    if (cnt0[r1] - cnt0[l1 - 1] != cnt0[r2] - cnt0[l2 - 1]) {
      cout << "No\n";
      continue;
    }
    if (cnt0[r1] - cnt0[l1 - 1] == 0) {
      cout << "Yes\n";
      continue;
    }
    int ok = 1;
    int zl1 = lower_bound(occ.begin(), occ.end(), l1) - occ.begin();
    int zr1 = upper_bound(occ.begin(), occ.end(), r1) - occ.begin() - 1;
    int zl2 = lower_bound(occ.begin(), occ.end(), l2) - occ.begin();
    int zr2 = upper_bound(occ.begin(), occ.end(), r2) - occ.begin() - 1;
    for (int i = 0; i < mods.size(); i++) {
      long long val1 = hs[i].get(zl1, zr1), val2 = hs[i].get(zl2, zr2);
      if (cnt1[l1 - 1] % 2) {
        val1 = hs[i].take_inv(val1, zr1 - zl1 + 1);
      }
      if (cnt1[l2 - 1] % 2) {
        val2 = hs[i].take_inv(val2, zr2 - zl2 + 1);
      }
      if (val1 != val2) {
        ok = 0;
        break;
      }
    }
    cout << (ok ? "Yes\n" : "No\n");
  }
  return 0;
}
