import
java.util.*;
public
class
Main
{
public
static
boolean
checkPath(
char
a,
char
b, Map<Character, List<Character>> G) {
Map<Character, Boolean> visited =
new
HashMap<>();
Deque<Character> queue =
new
LinkedList<>();
queue.addLast(a);
visited.put(a,
true
);
while
(!queue.isEmpty()) {
char
n = queue.removeFirst();
if
(n == b)
return
true
;
List<Character> edges = G.get(n);
for
(
char
i : edges) {
if
(!visited.containsKey(i)) {
queue.addLast(i);
visited.put(i,
true
);
}
}
}
return
false
;
}
public
static
int
countPairs(String s1, String s2, Map<Character, List<Character>> G,
int
x) {
int
count =
0
;
for
(
int
i =
0
; i < x; i++) {
char
a = s1.charAt(i);
char
b = s2.charAt(i);
if
(G.containsKey(a) && !G.containsKey(b) && a != b) {
G.put(a,
new
ArrayList<>(Arrays.asList(b)));
G.put(b,
new
ArrayList<>(Arrays.asList(a)));
count++;
}
else
if
(G.containsKey(b) && !G.containsKey(a) && a != b) {
G.put(b,
new
ArrayList<>(Arrays.asList(a)));
G.put(a,
new
ArrayList<>(Arrays.asList(b)));
count++;
}
else
if
(!G.containsKey(a) && !G.containsKey(b) && a != b) {
G.put(a,
new
ArrayList<>(Arrays.asList(b)));
G.put(b,
new
ArrayList<>(Arrays.asList(a)));
count++;
}
else
{
if
(!checkPath(a, b, G) && a != b) {
List<Character> aEdges = G.get(a);
aEdges.add(b);
G.put(a, aEdges);
List<Character> bEdges = G.get(b);
bEdges.add(a);
G.put(b, bEdges);
count++;
}
}
}
return
count-
1
;
}
public
static
void
main(String[] args) {
String s1 =
"abb"
;
String s2 =
"dad"
;
int
x = s1.length();
Map<Character, List<Character>> G =
new
HashMap<>();
System.out.println(countPairs(s1, s2, G, x));
}
}