using
System;
class
GFG{
static
readonly
int
N = 3;
static
readonly
int
M = 4;
static
int
[]directionInX =
new
int
[]{ -1, 0, 1, 0 };
static
int
[]directionInY =
new
int
[]{ 0, 1, 0, -1 };
static
bool
isValid(
int
x,
int
y)
{
if
(x < N && x >= 0 &&
y < M && y >= 0)
return
true
;
else
return
false
;
}
static
bool
isCycle(
int
x,
int
y,
char
[,]arr,
bool
[,]visited,
int
parentX,
int
parentY)
{
visited[x, y] =
true
;
for
(
int
k = 0; k < 4; k++)
{
int
newX = x + directionInX[k];
int
newY = y + directionInY[k];
if
(isValid(newX, newY) ==
true
&&
arr[newX, newY] == arr[x, y] &&
!(parentX == newX && parentY == newY))
{
if
(visited[newX, newY] ==
true
)
{
return
true
;
}
else
{
bool
check = isCycle(newX, newY,
arr, visited,
x, y);
if
(check ==
true
)
return
true
;
}
}
}
return
false
;
}
static
void
detectCycle(
char
[,]arr)
{
bool
[,]visited =
new
bool
[N, M];
for
(
int
i = 0; i < N; i++)
for
(
int
j = 0; j < M; j++)
visited[i, j] =
false
;
bool
cycle =
false
;
for
(
int
i = 0; i < N; i++)
{
if
(cycle ==
true
)
break
;
for
(
int
j = 0; j < M; j++)
{
if
(visited[i, j] ==
false
)
{
cycle = isCycle(i, j, arr,
visited, -1, -1);
}
if
(cycle ==
true
)
break
;
}
}
if
(cycle ==
true
)
{
Console.Write(
"Yes"
);
}
else
{
Console.Write(
"No"
);
}
}
public
static
void
Main(String[] args)
{
char
[,]arr = { {
'A'
,
'A'
,
'A'
,
'A'
},
{
'A'
,
'B'
,
'C'
,
'A'
},
{
'A'
,
'D'
,
'D'
,
'A'
} };
detectCycle(arr);
}
}