import
java.util.*;
class
GFG
{
static
final
int
N =
100000
;
@SuppressWarnings
(
"unchecked"
)
static
Vector<Integer>[] graph =
new
Vector[N];
@SuppressWarnings
(
"unchecked"
)
static
Vector<Integer>[] cycles =
new
Vector[N];
static
int
cyclenumber;
static
void
dfs_cycle(
int
u,
int
p,
int
[] color,
int
[] par)
{
if
(color[u] ==
2
)
{
return
;
}
if
(color[u] ==
1
)
{
Vector<Integer> v =
new
Vector<Integer>();
int
cur = p;
v.add(cur);
while
(cur != u)
{
cur = par[cur];
v.add(cur);
}
cycles[cyclenumber] = v;
cyclenumber++;
return
;
}
par[u] = p;
color[u] =
1
;
for
(
int
v : graph[u])
{
if
(v == par[u])
{
continue
;
}
dfs_cycle(v, u, color, par);
}
color[u] =
2
;
}
static
void
addEdge(
int
u,
int
v)
{
graph[u].add(v);
graph[v].add(u);
}
static
void
printCycles()
{
for
(
int
i =
0
; i < cyclenumber; i++)
{
System.out.printf(
"Cycle Number %d: "
, i +
1
);
for
(
int
x : cycles[i])
System.out.printf(
"%d "
, x);
System.out.println();
}
}
public
static
void
main(String[] args)
{
for
(
int
i =
0
; i < N; i++)
{
graph[i] =
new
Vector<>();
cycles[i] =
new
Vector<>();
}
addEdge(
1
,
2
);
addEdge(
2
,
3
);
addEdge(
3
,
4
);
addEdge(
4
,
6
);
addEdge(
4
,
7
);
addEdge(
5
,
6
);
addEdge(
3
,
5
);
addEdge(
7
,
8
);
addEdge(
6
,
10
);
addEdge(
5
,
9
);
addEdge(
10
,
9
);
addEdge(
10
,
11
);
addEdge(
11
,
12
);
addEdge(
11
,
13
);
addEdge(
12
,
13
);
int
[] color =
new
int
[N];
int
[] par =
new
int
[N];
int
[] mark =
new
int
[N];
cyclenumber =
0
;
dfs_cycle(
1
,
0
, color, par);
printCycles();
}
}