import
java.util.*;
class
GFG{
static
int
cnt =
1
;
static
void
dfs(Vector<Integer> v[],
int
in[],
int
out[],
int
visited[],
int
i)
{
visited[i] =
1
;
in[i] = cnt;
cnt++;
for
(
int
x : v[i])
{
if
(visited[x] ==
0
)
dfs(v, in, out, visited, x);
}
out[i] = cnt;
cnt++;
}
static
void
addedge(Vector<Integer> v[],
int
x,
int
y)
{
v[x].add(y);
v[y].add(x);
}
static
boolean
is_subtree(Vector<Integer> v[],
int
n,
int
m,
int
x,
int
y)
{
int
[]in =
new
int
[n +
1
];
int
[]out =
new
int
[n +
1
];
int
[]visited =
new
int
[n +
1
];
for
(
int
i =
1
; i <= n; i++)
{
in[i] =
0
;
out[i] =
0
;
visited[i] =
0
;
}
dfs(v, in, out, visited,
1
);
if
(in[y] < in[x] && out[y] > out[x])
return
true
;
else
return
false
;
}
public
static
void
main(String[] args)
{
int
n =
6
, m =
5
;
@SuppressWarnings
(
"unchecked"
)
Vector<Integer> []v =
new
Vector[n +
1
];
for
(
int
i =
0
; i < v.length; i++)
v[i] =
new
Vector<Integer>();
addedge(v,
1
,
2
);
addedge(v,
1
,
3
);
addedge(v,
2
,
4
);
addedge(v,
1
,
5
);
addedge(v,
3
,
6
);
int
x =
6
, y =
1
;
if
(is_subtree(v, n, m, x, y))
System.out.print(
"Yes"
);
else
System.out.print(
"No"
);
}
}