D. Irreducible Anagrams
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Let's call two strings t.

Let's consider two strings s1,t1,s2,t2,…,sk,tk that satisfy the following conditions:

  1. If we write the strings s;
  2. If we write the strings t;
  3. For all integers ti are anagrams of each other.

If such strings don't exist, then t are anagrams of each other.

For example, consider the string 

Codeforces 1291D

On the other hand, we can prove that s.

You will be given a string at least one irreducible anagram.

Input

The first line contains a string 1≤|s|≤2⋅105).

The second line contains a single integer 1≤q≤105)  — the number of queries.

Each of the following r-th.

Output

For each query, print a single line containing "Yes" (without quotes) if the corresponding substring has at least one irreducible anagram, and a single line containing "No" (without quotes) otherwise.

Examples
input
Copy
aaaaa
3
1 1
2 4
5 5
output
Copy
Yes
No
Yes
input
Copy
aabbbbbbc
6
1 2
2 4
2 2
1 9
5 7
3 5
output
Copy
No
Yes
Yes
Yes
No
No
Note

In the first sample, in the first and third queries, the substring is "a", which has itself as an irreducible anagram since two or more non-empty strings cannot be put together to obtain "a". On the other hand, in the second query, the substring is "aaa", which has no irreducible anagrams: its only anagram is itself, and we may choose 

In the second query of the second sample, the substring is "abb", which has, for example, "bba" as an irreducible anagram.

/*
    存在非反转组合的情况只有以下三种,看了半个小时英文解释也没弄清楚,就这样吧:
    1.长度等于1
    2.有至少3种不同的字母
    3.首字母和尾字母不同
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 200010
using namespace std;
int q,l,r,n;
char s[maxn];
int sum[30][maxn];
int main(){
    scanf("%s",s+1);
    n=strlen(s+1);
    for(int i=1;i<=n;i++){
        int tmp=s[i]-'a'+1;
        for(int j=1;j<=26;j++)sum[j][i]=sum[j][i-1];
        sum[tmp][i]++;
    }
    scanf("%d",&q);
    while(q--){
        scanf("%d%d",&l,&r);
        if(l==r){
            puts("Yes");
            continue;
        }
        if(s[l]!=s[r]){
            puts("Yes");
            continue;
        }
        int cnt=0;
        for(int i=1;i<=26;i++){
            if(sum[i][r]-sum[i][l-1]>0)cnt++;
        }
        if(cnt>=3){
            puts("Yes");
            continue;
        }
        puts("No");
    }
}

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-11
  • 2021-08-24
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-07-11
  • 2022-12-23
  • 2021-11-21
  • 2021-06-09
  • 2021-06-15
  • 2021-08-18
  • 2022-12-23
相关资源
相似解决方案