using
System;
class
GFG{
public
static
int
N = 5;
public
static
void
computeLPSArray(
char
[] pat,
int
M,
int
[] lps)
{
int
len = 0;
int
i = 1;
lps[0] = 0;
while
(i < M)
{
if
(pat[i] == pat[len])
{
len++;
lps[i++] = len;
}
else
{
if
(len != 0)
{
len = lps[len - 1];
}
else
{
lps[i++] = 0;
}
}
}
}
public
static
int
KMPSearch(
char
[] pat,
char
[] txt)
{
int
M = pat.Length;
int
[] lps =
new
int
[M];
int
j = 0;
computeLPSArray(pat, M, lps);
int
i = 0;
while
(i < N)
{
if
(pat[j] == txt[i])
{
j++;
i++;
}
if
(j == M)
{
return
1;
}
else
if
(i < N && pat[j] != txt[i])
{
if
(j != 0)
{
j = lps[j - 1];
}
else
{
i = i + 1;
}
}
}
return
0;
}
public
static
void
findOrientation(
char
[,] mat,
char
[] pat)
{
char
[] col =
new
char
[N];
for
(
int
i = 0; i < N; i++)
{
char
[] row =
new
char
[(mat.GetLength(1))];
for
(
int
j = 0; j < mat.GetLength(1); j++)
{
row[j] = mat[i, j];
}
if
(KMPSearch(pat, row) == 1)
{
Console.WriteLine(
"Horizontal"
);
return
;
}
for
(
int
j = 0; j < N; j++)
{
col[j] = mat[j,i];
}
if
(KMPSearch(pat, col) == 1)
{
Console.WriteLine(
"Vertical"
);
}
}
}
static
public
void
Main()
{
char
[,] mat = { {
'a'
,
'b'
,
'c'
,
'd'
,
'e'
},
{
'f'
,
'g'
,
'h'
,
'i'
,
'j'
},
{
'k'
,
'l'
,
'm'
,
'n'
,
'o'
},
{
'p'
,
'q'
,
'r'
,
's'
,
't'
},
{
'u'
,
'v'
,
'w'
,
'x'
,
'y'
} };
char
[] pat = {
'p'
,
'q'
,
'r'
,
's'
};
findOrientation(mat, pat);
}
}