import
java.io.*;
import
java.util.*;
import
java.util.LinkedList;
class
Graph
{
private
int
V;
private
LinkedList<Integer> adj[];
int
time =
0
;
static
final
int
NIL = -
1
;
Graph(
int
v)
{
V = v;
adj =
new
LinkedList[v];
for
(
int
i=
0
; i<v; ++i)
adj[i] =
new
LinkedList();
}
void
addEdge(
int
v,
int
w)
{
adj[v].add(w);
adj[w].add(v);
}
boolean
isBCUtil(
int
u,
boolean
visited[],
int
disc[],
int
low[],
int
parent[])
{
int
children =
0
;
visited[u] =
true
;
disc[u] = low[u] = ++time;
Iterator<Integer> i = adj[u].iterator();
while
(i.hasNext())
{
int
v = i.next();
if
(!visited[v])
{
children++;
parent[v] = u;
if
(isBCUtil(v, visited, disc, low, parent))
return
true
;
low[u] = Math.min(low[u], low[v]);
if
(parent[u] == NIL && children >
1
)
return
true
;
if
(parent[u] != NIL && low[v] >= disc[u])
return
true
;
}
else
if
(v != parent[u])
low[u] = Math.min(low[u], disc[v]);
}
return
false
;
}
boolean
isBC()
{
boolean
visited[] =
new
boolean
[V];
int
disc[] =
new
int
[V];
int
low[] =
new
int
[V];
int
parent[] =
new
int
[V];
for
(
int
i =
0
; i < V; i++)
{
parent[i] = NIL;
visited[i] =
false
;
}
if
(isBCUtil(
0
, visited, disc, low, parent) ==
true
)
return
false
;
for
(
int
i =
0
; i < V; i++)
if
(visited[i] ==
false
)
return
false
;
return
true
;
}
public
static
void
main(String args[])
{
Graph g1 =
new
Graph(
2
);
g1.addEdge(
0
,
1
);
if
(g1.isBC())
System.out.println(
"Yes"
);
else
System.out.println(
"No"
);
Graph g2 =
new
Graph(
5
);
g2.addEdge(
1
,
0
);
g2.addEdge(
0
,
2
);
g2.addEdge(
2
,
1
);
g2.addEdge(
0
,
3
);
g2.addEdge(
3
,
4
);
g2.addEdge(
2
,
4
);
if
(g2.isBC())
System.out.println(
"Yes"
);
else
System.out.println(
"No"
);
Graph g3 =
new
Graph(
3
);
g3.addEdge(
0
,
1
);
g3.addEdge(
1
,
2
);
if
(g3.isBC())
System.out.println(
"Yes"
);
else
System.out.println(
"No"
);
Graph g4 =
new
Graph(
5
);
g4.addEdge(
1
,
0
);
g4.addEdge(
0
,
2
);
g4.addEdge(
2
,
1
);
g4.addEdge(
0
,
3
);
g4.addEdge(
3
,
4
);
if
(g4.isBC())
System.out.println(
"Yes"
);
else
System.out.println(
"No"
);
Graph g5=
new
Graph(
3
);
g5.addEdge(
0
,
1
);
g5.addEdge(
1
,
2
);
g5.addEdge(
2
,
0
);
if
(g5.isBC())
System.out.println(
"Yes"
);
else
System.out.println(
"No"
);
}
}