#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 50, M1 = 998244353, M2 = 1e9 + 7;
struct ModInt {
  int x1, x2;
  ModInt(int a = 0, int b = 0) : x1(a), x2(b) {}
};
ModInt operator+(ModInt a, ModInt b) {
  return ModInt((a.x1 + b.x1) % M1, (a.x2 + b.x2) % M2);
}
ModInt operator-(ModInt a, ModInt b) {
  return ModInt((a.x1 - b.x1 + M1) % M1, (a.x2 - b.x2 + M2) % M2);
}
ModInt operator*(ModInt a, ModInt b) {
  return ModInt(1ll * a.x1 * b.x1 % M1, 1ll * a.x2 * b.x2 % M2);
}
bool operator==(ModInt a, ModInt b) { return a.x1 == b.x1 && a.x2 == b.x2; }
int n, m, sz[N], B[2];
char s[N];
ModInt h[2][N], pw[N];
ModInt f(int l, int r) {
  return h[l & 1][sz[r]] - h[l & 1][sz[l - 1]] * pw[sz[r] - sz[l - 1]];
}
int main(int argc, char *argv[]) {
  scanf("%d%s", &n, s + 1);
  pw[0] = ModInt(1, 1), B[0] = 213, B[1] = 233;
  for (int i = 1; i <= (n); ++i) {
    pw[i] = pw[i - 1] * ModInt(10007, 10007);
    if (s[i] == '0') {
      ++m;
      h[0][m] = h[0][m - 1] * pw[1] + ModInt(B[i & 1], B[i & 1]);
      h[1][m] = h[1][m - 1] * pw[1] + ModInt(B[(i & 1) ^ 1], B[(i & 1) ^ 1]);
    }
    sz[i] = m;
  }
  int q;
  scanf("%d", &q);
  while (q--) {
    int l1, l2, len;
    scanf("%d%d%d", &l1, &l2, &len);
    puts(f(l1, l1 + len - 1) == f(l2, l2 + len - 1) ? "Yes" : "No");
  }
  return 0;
}
