import
java.util.ArrayList;
import
java.util.HashSet;
import
java.util.LinkedList;
import
java.util.Queue;
import
java.util.Set;
public
class
Main {
static
boolean
checkEqual(String[] arr,
int
N) {
int
M = arr[
0
].length();
ArrayList<Integer>[] adj =
new
ArrayList[N];
for
(
int
i =
0
; i < N; i++) {
adj[i] =
new
ArrayList<>();
}
for
(
int
i =
0
; i < N; i++) {
for
(
int
j = i +
1
; j < N; j++) {
int
cnt =
0
;
for
(
int
k =
0
; k < M; k++) {
if
(arr[i].charAt(k) != arr[j].charAt(k)) {
cnt++;
}
if
(cnt >
2
) {
break
;
}
}
if
(cnt ==
2
) {
adj[i].add(j);
adj[j].add(i);
}
}
}
ArrayList<Set<Integer>> components =
new
ArrayList<>();
boolean
[] visited =
new
boolean
[N];
for
(
int
i =
0
; i < N; i++) {
if
(!visited[i]) {
Set<Integer> component =
new
HashSet<>();
Queue<Integer> q =
new
LinkedList<>();
q.add(i);
visited[i] =
true
;
while
(!q.isEmpty()) {
int
u = q.poll();
component.add(u);
for
(
int
v : adj[u]) {
if
(!visited[v]) {
q.add(v);
visited[v] =
true
;
}
}
}
components.add(component);
}
}
for
(Set<Integer> component : components) {
int
[] freq =
new
int
[
256
];
for
(
int
u : component) {
for
(
int
k =
0
; k < M; k++) {
freq[arr[u].charAt(k)]++;
}
}
for
(
int
i =
0
; i <
256
; i++) {
if
(freq[i] % component.size() !=
0
) {
return
false
;
}
}
}
return
true
;
}
public
static
void
main(String[] args) {
String[] arr = {
"fdd"
,
"fhh"
};
int
N = arr.length;
if
(checkEqual(arr, N)) {
System.out.println(
"YES"
);
}
else
{
System.out.println(
"NO"
);
}
}
}