import
java.util.*;
class
GFG{
static
int
N =
1000000
;
static
Vector<Integer> prime =
new
Vector<Integer>();
static
void
SieveOfEratosthenes()
{
boolean
[]check =
new
boolean
[N +
1
];
Arrays.fill(check,
true
);
for
(
int
p =
2
; p * p <= N; p++) {
if
(check[p] ==
true
) {
prime.add(p);
for
(
int
i = p * p; i <= N; i += p)
check[i] =
false
;
}
}
}
static
class
Node {
int
key;
Node left, right;
};
static
Node newNode(
int
key)
{
Node temp =
new
Node();
temp.key = key;
temp.left = temp.right =
null
;
return
(temp);
}
static
boolean
isLevelCo_Prime(Vector<Integer> L)
{
int
max =
0
;
for
(
int
x : L) {
if
(max < x)
max = x;
}
for
(
int
i =
0
;
i * prime.get(i) <= max /
2
;
i++) {
int
ct =
0
;
for
(
int
x : L) {
if
(x % prime.get(i) ==
0
)
ct++;
}
if
(ct >
1
) {
return
false
;
}
}
return
true
;
}
static
void
printCo_PrimeLevels(Vector<Integer> Lev)
{
for
(
int
x : Lev) {
System.out.print(x+
" "
);
}
System.out.println();
}
static
void
findCo_PrimeLevels(
Node node,
Node queue[],
int
index,
int
size)
{
Vector<Integer> Lev =
new
Vector<Integer>();
while
(index < size) {
int
curr_size = size;
while
(index < curr_size) {
Node temp = queue[index];
Lev.add(temp.key);
if
(temp.left !=
null
)
queue[size++] = temp.left;
if
(temp.right !=
null
)
queue[size++] = temp.right;
index++;
}
if
(isLevelCo_Prime(Lev)) {
printCo_PrimeLevels(Lev);
}
Lev.clear();
}
}
static
int
findSize(Node node)
{
if
(node ==
null
)
return
0
;
return
1
+ findSize(node.left)
+ findSize(node.right);
}
static
void
printCo_PrimeLevels(Node node)
{
int
t_size = findSize(node);
Node []queue =
new
Node[t_size];
queue[
0
] = node;
findCo_PrimeLevels(node, queue,
0
,
1
);
}
public
static
void
main(String[] args)
{
Node root = newNode(
10
);
root.left = newNode(
48
);
root.right = newNode(
12
);
root.right.left = newNode(
18
);
root.right.right = newNode(
35
);
root.right.left.left = newNode(
21
);
root.right.left.right = newNode(
29
);
root.right.right.left = newNode(
43
);
root.right.right.right = newNode(
16
);
root.right.right.right.left = newNode(
7
);
SieveOfEratosthenes();
printCo_PrimeLevels(root);
}
}