import
java.util.*;
public
class
Main
{
static
void
bfs(
int
node,
int
parent,
int
[] height,
int
[] vis, Vector<Vector<Integer>> tree)
{
vis[node] =
1
;
Queue<Integer> q =
new
LinkedList<>();
q.add(
1
);
height[node] =
1
+ height[parent];
while
(q.size() !=
0
)
{
int
top = (
int
)q.peek();
q.remove();
vis[top] =
1
;
for
(
int
i =
0
; i < tree.get(top).size(); i++)
{
if
(vis[(
int
)tree.get(top).get(i)] ==
0
)
{
q.add(tree.get(top).get(i));
height[(
int
)tree.get(top).get(i)] =
1
+ height[top];
}
}
}
}
static
void
insertEdges(
int
x,
int
y, Vector<Vector<Integer>> tree)
{
tree.get(x).add(y);
tree.get(y).add(x);
}
static
void
printLevelsOddEven(
int
N,
int
[] vis,
int
[] height)
{
int
[] mark =
new
int
[N +
1
];
for
(
int
i =
0
; i < N +
1
; i++)
{
mark[i] =
0
;
}
int
maxLevel =
0
;
for
(
int
i =
1
; i <= N; i++)
{
if
(vis[i]!=
0
)
mark[height[i]]++;
maxLevel = Math.max(height[i], maxLevel);
}
System.out.print(
"The levels with odd "
+
"number of nodes are: "
);
for
(
int
i =
1
; i <= maxLevel; i++)
{
if
(mark[i] %
2
!=
0
)
{
System.out.print(i +
" "
);
}
}
System.out.println();
System.out.print(
"The levels with even "
+
"number of nodes are: "
);
for
(
int
i =
1
; i <= maxLevel; i++)
{
if
(mark[i] %
2
==
0
)
{
System.out.print(i +
" "
);
}
}
}
public
static
void
main(String[] args) {
int
N =
9
;
Vector<Vector<Integer>> tree =
new
Vector<Vector<Integer>>();
for
(
int
i =
0
; i < N +
1
; i++)
{
tree.add(
new
Vector<Integer>());
}
insertEdges(
1
,
2
, tree);
insertEdges(
1
,
3
, tree);
insertEdges(
2
,
4
, tree);
insertEdges(
2
,
5
, tree);
insertEdges(
5
,
7
, tree);
insertEdges(
5
,
8
, tree);
insertEdges(
3
,
6
, tree);
insertEdges(
6
,
9
, tree);
int
[] height =
new
int
[N +
1
];
int
[] vis =
new
int
[N +
1
];
for
(
int
i =
0
; i < N +
1
; i++)
{
vis[i] =
0
;
}
height[
0
] =
0
;
bfs(
1
,
0
, height, vis, tree);
printLevelsOddEven(N, vis, height);
}
}