import
java.util.*;
public
class
GFG {
public
static
class
DisjointSet {
private
int
[] parent, rank;
public
DisjointSet() {
parent =
new
int
[
26
];
rank =
new
int
[
26
];
for
(
int
i =
0
; i <
26
; i++) {
parent[i] = i;
rank[i] =
1
;
}
}
public
int
findParent(
int
v) {
if
(v == parent[v])
return
v;
return
parent[v] = findParent(parent[v]);
}
public
void
union(
int
p1,
int
p2) {
p1 = findParent(p1);
p2 = findParent(p2);
if
(p1 != p2) {
if
(rank[p1] < rank[p2]) {
parent[p1] = p2;
}
else
if
(rank[p2] < rank[p1]) {
parent[p2] = p1;
}
else
{
parent[p2] = p1;
rank[p1] +=
1
;
}
}
}
public
boolean
connected(
int
p1,
int
p2) {
p1 = findParent(p1);
p2 = findParent(p2);
if
(p1 == p2)
return
true
;
return
false
;
}
}
public
static
boolean
solve(String target, List<Map.Entry<Character, Character>> pairs) {
DisjointSet dsu =
new
DisjointSet();
for
(Map.Entry<Character, Character> i : pairs) {
dsu.union(i.getKey() -
'a'
, i.getValue() -
'a'
);
}
int
lower =
0
, upper = target.length() -
1
;
while
(lower <= upper) {
if
(!dsu.connected(target.charAt(lower) -
'a'
, target.charAt(upper) -
'a'
)) {
return
false
;
}
lower +=
1
;
upper -=
1
;
}
return
true
;
}
public
static
void
main(String[] args) {
String target =
"geeks"
;
List<Map.Entry<Character, Character>> pairs =
new
ArrayList<>();
pairs.add(
new
AbstractMap.SimpleEntry<>(
'g'
,
's'
));
pairs.add(
new
AbstractMap.SimpleEntry<>(
'e'
,
'k'
));
boolean
ans = solve(target, pairs);
if
(ans) {
System.out.println(
"true"
);
}
else
{
System.out.println(
"false"
);
}
}
}