#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<string.h>
using namespace std;

typedef long long LL;
typedef vector<int> VI;

#define REP(i,n) for(int i=0, i##_len=(n); i<i##_len; ++i)
#define EACH(i,c) for(__typeof((c).begin()) i=(c).begin(),i##_end=(c).end();i!=i##_end;++i)
#define eprintf(...) fprintf(stderr, __VA_ARGS__)

template<class T> inline void amin(T &x, const T &y) { if (y<x) x=y; }
template<class T> inline void amax(T &x, const T &y) { if (x<y) x=y; }
template<class Iter> void rprintf(const char *fmt, Iter begin, Iter end) {
    for (bool sp=0; begin!=end; ++begin) { if (sp) putchar(' '); else sp = true; printf(fmt, *begin); }
    putchar('\n');
}

const int MAX = 500111;
int N, Q;
char S[MAX];
int pos[MAX][27];
int cut[21][MAX];

int main() {
    scanf("%s%d", S, &Q);
    N = strlen(S);
    memset(pos, -1, sizeof pos);

    for (int i=N; i--;) {
	int d = S[i]-'a';
	pos[i][d] = i+1;
	for (int k=d; k<26; k++) {
	    if (pos[i][k] == -1) break;
	    pos[i][k+1] = pos[pos[i][k]][k];
	}
	if (pos[i][26] != -1) {
	    for (int k=0; k<d; k++) 
		pos[i][k] = pos[pos[i][26]][k];
	}
    }

    REP (i, N+10) {
	if (pos[i][26] == -1) cut[0][i] = N + 1;
	else cut[0][i] = pos[i][26];
    }
    REP (t, 20) REP (i, N+10) cut[t+1][i] = cut[t][cut[t][i]];

    REP ($, Q) {
	int L, R;
	scanf("%d%d", &L, &R);
	L--;
	for (int t=21; t--;) {
	    if (cut[t][L] <= R) L = cut[t][L];
	}
	
	puts(L == R ? "Yes":"No");

    }

    return 0;
}

