import
java.util.*;
class
GFG {
static
String Join(String d,
int
[] arr)
{
String res = String.valueOf(arr[
0
]) + d
+ String.valueOf(arr[
1
]);
return
res;
}
static
boolean
isUpDirected(HashMap<String, Integer> point,
int
x,
int
y)
{
return
(point.containsKey(
Join(
","
,
new
int
[] { x -
1
, y }))
&& point.containsKey(
Join(
","
,
new
int
[] { x, y }))
&& point.containsKey(
Join(
","
,
new
int
[] { x +
1
, y }))
&& point.containsKey(
Join(
","
,
new
int
[] { x, y -
1
}))
&& point.containsKey(
Join(
","
,
new
int
[] { x, y -
2
})));
}
static
boolean
isDownDirected(HashMap<String, Integer> point,
int
x,
int
y)
{
return
(point.containsKey(
Join(
","
,
new
int
[] { x -
1
, y }))
&& point.containsKey(
Join(
","
,
new
int
[] { x, y }))
&& point.containsKey(
Join(
","
,
new
int
[] { x +
1
, y }))
&& point.containsKey(
Join(
","
,
new
int
[] { x, y +
1
}))
&& point.containsKey(
Join(
","
,
new
int
[] { x, y +
2
})));
}
static
boolean
isLeftDirected(HashMap<String, Integer> point,
int
x,
int
y)
{
return
(point.containsKey(
Join(
","
,
new
int
[] { x, y +
1
}))
&& point.containsKey(
Join(
","
,
new
int
[] { x, y }))
&& point.containsKey(
Join(
","
,
new
int
[] { x, y -
1
}))
&& point.containsKey(
Join(
","
,
new
int
[] { x +
1
, y }))
&& point.containsKey(
Join(
","
,
new
int
[] { x +
2
, y })));
}
static
boolean
isRightDirected(HashMap<String, Integer> point,
int
x,
int
y)
{
return
(point.containsKey(
Join(
","
,
new
int
[] { x, y +
1
}))
&& point.containsKey(
Join(
","
,
new
int
[] { x, y }))
&& point.containsKey(
Join(
","
,
new
int
[] { x, y -
1
}))
&& point.containsKey(
Join(
","
,
new
int
[] { x -
1
, y }))
&& point.containsKey(
Join(
","
,
new
int
[] { x -
2
, y })));
}
static
String solve(
int
[][] grid,
int
n)
{
HashMap<String, Integer> point
=
new
HashMap<String, Integer>();
boolean
flag =
false
;
for
(
int
i =
0
; i < n; i++)
{
point.put(Join(
","
,
new
int
[] { grid[i][
0
],
grid[i][
1
] }),
1
);
}
for
(
int
i =
0
; i < n; i++)
{
if
(isUpDirected(point, grid[i][
0
], grid[i][
1
])
|| isDownDirected(point, grid[i][
0
],
grid[i][
1
])
|| isLeftDirected(point, grid[i][
0
],
grid[i][
1
])
|| isRightDirected(point, grid[i][
0
],
grid[i][
1
])) {
flag =
true
;
break
;
}
}
if
(flag)
return
"Yes"
;
else
return
"No"
;
}
public
static
void
main(String[] args)
{
int
[][] grid1 = {
{
7
,
5
}, {
8
,
5
}, {
6
,
5
}, {
7
,
7
}, {
7
,
6
}
};
int
n1 =
5
;
System.out.println(solve(grid1, n1));
int
[][] grid2 = { {
0
,
0
},
{
1
,
0
},
{
2
,
0
},
{
1
, -
1
},
{
1
, -
2
} };
int
n2 =
5
;
System.out.println(solve(grid2, n2));
}
}