import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
public
class
GFG {
static
int
findParent(List<Integer> parent,
int
node) {
return
parent.get(node) == node ? node : findParent(parent, parent.get(node));
}
static
void
uniteSets(List<Integer> parent, List<Integer> size,
int
node1,
int
node2) {
node1 = findParent(parent, node1);
node2 = findParent(parent, node2);
if
(node1 == node2) {
return
;
}
if
(size.get(node1) < size.get(node2)) {
int
temp = node1;
node1 = node2;
node2 = temp;
}
parent.set(node2, node1);
size.set(node1, size.get(node1) + size.get(node2));
}
static
boolean
canTraverseAllPairs(List<Integer> nums) {
int
n = nums.size();
if
(n ==
1
) {
return
true
;
}
List<Integer> parent =
new
ArrayList<>(n);
List<Integer> size =
new
ArrayList<>(n);
for
(
int
i =
0
; i < n; ++i) {
parent.add(i);
size.add(
1
);
}
Map<Integer, Integer> factorsMap =
new
HashMap<>();
for
(
int
i =
0
; i < n; ++i) {
int
x = nums.get(i);
if
(x ==
1
) {
return
false
;
}
for
(
int
factor =
2
; factor * factor <= x; ++factor) {
if
(x % factor ==
0
) {
if
(factorsMap.containsKey(factor)) {
uniteSets(parent, size, i, factorsMap.get(factor));
}
else
{
factorsMap.put(factor, i);
}
while
(x % factor ==
0
) {
x /= factor;
}
}
}
if
(x >
1
) {
if
(factorsMap.containsKey(x)) {
uniteSets(parent, size, i, factorsMap.get(x));
}
else
{
factorsMap.put(x, i);
}
}
}
return
size.get(findParent(parent,
0
)) == n;
}
public
static
void
main(String[] args) {
List<Integer> nums =
new
ArrayList<>();
nums.add(
4
);
nums.add(
3
);
nums.add(
12
);
nums.add(
8
);
boolean
result = canTraverseAllPairs(nums);
if
(result) {
System.out.println(
1
);
}
else
{
System.out.println(
0
);
}
}
}