import
java.util.HashSet;
import
java.util.Set;
class
GFG {
static
final
long
MAX_SIZE =
1000001
;
static
final
long
ALPHABET_SIZE =
11
;
static
final
long
MODULO = 1110111110111L;
static
long
[] base =
new
long
[(
int
)MAX_SIZE];
static
long
calculateHash(String s)
{
long
hashValue =
0
;
for
(
int
i =
0
; i < s.length(); i++) {
hashValue += s.charAt(i) * base[i];
hashValue %= MODULO;
}
return
hashValue;
}
static
void
solve(String[] s,
int
numStrings,
String[] queries,
int
q)
{
Set<Long> stringSet =
new
HashSet<>();
for
(
int
i =
0
; i < numStrings; i++) {
stringSet.add(calculateHash(s[i]));
}
for
(
int
i =
0
; i < q; i++) {
String query = queries[i];
long
hashValue = calculateHash(query);
boolean
exists =
false
;
for
(
int
j =
0
; j < query.length(); j++) {
for
(
char
c =
'a'
; c <
'd'
; c++) {
if
(c != query.charAt(j)) {
exists |= stringSet.contains(
(hashValue
+ (c - query.charAt(j))
* base[j] +
4
* MODULO)
% MODULO);
}
}
}
System.out.println(exists ?
"YES"
:
"NO"
);
}
}
public
static
void
main(String[] args)
{
base[
0
] =
1
;
for
(
int
i =
1
; i < MAX_SIZE; i++) {
base[i]
= (base[i -
1
] * ALPHABET_SIZE) % MODULO;
}
String[] s = {
"acbacbacb"
};
int
numStrings = s.length;
String[] queries
= {
"cbacbacb"
,
"acbacbac"
,
"aacbacbacb"
,
"acbacbacbb"
,
"acbaabacb"
};
int
q = queries.length;
solve(s, numStrings, queries, q);
}
}