using
System;
using
System.Collections.Generic;
class
GFG
{
static
int
N = 100000;
static
int
cyclenumber;
static
List<
int
>[] graph =
new
List<
int
>[N];
static
void
dfs_cycle(
int
u,
int
p,
int
[] color,
int
[] mark,
int
[] par)
{
if
(color[u] == 2)
return
;
if
(color[u] == 1)
{
cyclenumber++;
int
cur = p;
mark[cur] = cyclenumber;
while
(cur != u)
{
cur = par[cur];
mark[cur] = cyclenumber;
}
return
;
}
par[u] = p;
color[u] = 1;
foreach
(
int
v
in
graph[u])
{
if
(v == par[u])
{
continue
;
}
dfs_cycle(v, u, color, mark, par);
}
color[u] = 2;
}
static
void
addEdge(
int
u,
int
v)
{
graph[u].Add(v);
graph[v].Add(u);
}
static
int
productLength(
int
edges,
int
[] mark)
{
Dictionary<
int
,
int
> mp =
new
Dictionary<
int
,
int
>();
for
(
int
i = 1; i <= edges; i++)
{
if
(mark[i] != 0)
{
if
(mp.ContainsKey(mark[i]))
mp[mark[i]] = mp[mark[i]] + 1;
else
mp.Add(mark[i], 1);
}
}
int
cnt = 1;
for
(
int
i = 1; i <= cyclenumber; i++)
{
cnt = cnt * mp[i];
}
if
(cyclenumber == 0)
cnt = 0;
return
cnt;
}
public
static
void
Main(String[] args)
{
for
(
int
i = 0; i < N; i++)
graph[i] =
new
List<
int
>();
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, 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;
int
edges = 13;
dfs_cycle(1, 0, color, mark, par);
Console.WriteLine(productLength(edges, mark));
}
}