import
java.util.ArrayList;
import
java.util.List;
class
Pair {
int
first, second;
Pair(
int
first,
int
second)
{
this
.first = first;
this
.second = second;
}
}
public
class
Main {
static
final
int
M = (
int
)1e9 +
7
;
static
List<Pair> directions =
new
ArrayList<Pair>() {
{
add(
new
Pair(
0
,
1
));
add(
new
Pair(-
1
,
0
));
add(
new
Pair(
0
, -
1
));
add(
new
Pair(
1
,
0
));
add(
new
Pair(
1
,
1
));
add(
new
Pair(-
1
, -
1
));
add(
new
Pair(-
1
,
1
));
add(
new
Pair(
1
, -
1
));
}
};
static
boolean
isInside(
int
i,
int
j,
int
N,
int
M)
{
if
(i >=
0
&& i < N && j >=
0
&& j < M) {
return
true
;
}
return
false
;
}
static
int
gcd(
int
a,
int
b)
{
int
i;
if
(a < b)
i = a;
else
i = b;
for
(i = i; i >
1
; i--) {
if
(a % i ==
0
&& b % i ==
0
)
return
i;
}
return
1
;
}
static
void
DFS(
int
[][] mat,
int
N,
int
M,
int
i,
int
j,
boolean
[][] visited)
{
if
(visited[i][j] ==
true
) {
return
;
}
visited[i][j] =
true
;
for
(Pair pair : directions) {
int
I = i + pair.first;
int
J = j + pair.second;
if
(isInside(I, J, N, M)) {
if
(mat[I][J] ==
0
) {
DFS(mat, N, M, I, J, visited);
}
}
}
}
static
void
check(
int
N,
int
M,
int
[][] mat)
{
int
black =
0
;
for
(
int
i =
0
; i < N; i++) {
for
(
int
j =
0
; j < M; j++) {
if
(mat[i][j] ==
0
) {
black++;
}
}
}
if
(black <
2
* (Math.max(N, M))) {
System.out.println(
"NO"
);
return
;
}
boolean
[][] visited =
new
boolean
[N][M];
int
black_spots =
0
;
for
(
int
i =
0
; i < N; i++) {
for
(
int
j =
0
; j < M; j++) {
if
(visited[i][j] ==
false
&& mat[i][j] ==
0
) {
black_spots++;
DFS(mat, N, M, i, j, visited);
}
}
}
int
T = gcd(N, M);
System.out.println(black_spots >= T ?
"Yes"
:
"No"
);
}
public
static
void
main(String[] args)
{
int
N =
3
, M =
3
;
int
[][] mat
= { {
0
,
0
,
1
}, {
1
,
1
,
1
}, {
0
,
0
,
1
} };
check(M, N, mat);
}
}