using
System;
public
class
GFG {
const
int
N = 3;
static
char
[, ] ch = { {
'0'
,
'1'
,
'1'
},
{
'0'
,
'0'
,
'0'
},
{
'1'
,
'1'
,
'1'
} };
static
int
[, ] H =
new
int
[N, N];
static
int
[, ] V =
new
int
[N, N];
static
int
[, ] DB =
new
int
[N, N];
static
int
[, ] DF =
new
int
[N, N];
static
int
[, ] sol =
new
int
[N, N];
static
void
horizontal()
{
for
(
int
i = 0; i < N; i++) {
for
(
int
j = 0; j < N; j++) {
if
(ch[i, j] ==
'1'
) {
int
k = j, count = 0;
while
(k < N) {
if
(ch[i, k] ==
'1'
) {
count++;
k++;
}
else
{
break
;
}
}
k--;
for
(
int
l = j; l <= k; l++)
H[i, l] = count;
j = k;
}
else
{
H[i, j] = 0;
}
}
}
}
static
void
vertical()
{
for
(
int
i = 0; i < N; i++) {
for
(
int
j = 0; j < N; j++) {
if
(ch[j, i] ==
'1'
) {
int
k = j, count = 0;
while
(k < N) {
if
(ch[k, i] ==
'1'
) {
count++;
k++;
}
else
{
break
;
}
}
k--;
for
(
int
l = j; l <= k; l++)
V[l, i] = count;
j = k;
}
else
{
V[j, i] = 0;
}
}
}
}
static
void
diagonalBackward()
{
for
(
int
i = 0; i < N; i++) {
int
l = -1;
for
(
int
j = i; j < N; j++) {
l++;
if
(ch[l, j] ==
'1'
) {
int
m = l, n = j, count = 0;
while
(n < N) {
if
(ch[m, n] ==
'1'
) {
count++;
m++;
n++;
}
else
{
break
;
}
}
m--;
n--;
for
(
int
p = j; p <= n; p++) {
DB[l, p] = count;
l++;
}
l--;
j = n;
}
else
{
DB[l, j] = 0;
}
}
}
for
(
int
i = 1; i < N; i++) {
int
l = i - 1;
for
(
int
j = 0; j < (N - i); j++) {
l++;
if
(ch[l, j] ==
'1'
) {
int
m = l, n = j, count = 0;
while
(n < (N - i)) {
if
(ch[m, n] ==
'1'
) {
count++;
m++;
n++;
}
else
{
break
;
}
}
m--;
n--;
for
(
int
p = j; p <= n; p++) {
DB[l, p] = count;
l++;
}
l--;
j = n;
}
else
{
DB[l, j] = 0;
}
}
}
}
static
void
diagonalForward()
{
for
(
int
i = 0; i < N; i++) {
int
l = i;
for
(
int
j = 0; j <= i; j++) {
if
(ch[j, l] ==
'1'
) {
int
m = j, n = l, count = 0;
while
(m <= i) {
if
(ch[m, n] ==
'1'
) {
count++;
m++;
n--;
}
else
{
break
;
}
}
m--;
n++;
for
(
int
p = j; p <= m; p++) {
DF[p, l] = count;
l--;
}
j = m;
l = n;
l--;
}
else
{
DF[j, l] = 0;
l--;
}
}
}
for
(
int
i = 1; i < N; i++) {
int
l = i;
for
(
int
j = N - 1; j >= i; j--) {
if
(ch[l, j] ==
'1'
) {
int
m = l, n = j, count = 0;
while
(n >= i) {
if
(ch[m, n] ==
'1'
) {
count++;
m++;
n--;
}
else
{
break
;
}
}
n++;
m--;
for
(
int
p = l; p <= m; p++) {
DF[p, j] = count;
j--;
}
l = m + 1;
j = n;
}
else
{
DF[l, j] = 0;
l++;
}
}
}
}
static
void
maxSol()
{
Array.Clear(sol, 0, sol.Length);
int
max_ =
int
.MinValue;
for
(
int
i = 0; i < N; i++) {
for
(
int
j = 0; j < N; j++) {
if
(H[i, j] >= V[i, j]
&& H[i, j] >= DB[i, j]
&& H[i, j] >= DF[i, j])
sol[i, j] = H[i, j];
else
if
(V[i, j] >= H[i, j]
&& V[i, j] >= DB[i, j]
&& V[i, j] >= DF[i, j])
sol[i, j] = V[i, j];
else
if
(DB[i, j] >= H[i, j]
&& DB[i, j] >= V[i, j]
&& DB[i, j] >= DF[i, j])
sol[i, j] = DB[i, j];
else
sol[i, j] = DF[i, j];
max_ = Math.Max(max_, sol[i, j]);
}
}
Console.WriteLine(max_);
}
static
void
solution()
{
for
(
int
i = 0; i < N; i++) {
for
(
int
j = 0; j < N; j++) {
H[i, j] = 0;
V[i, j] = 0;
DB[i, j] = 0;
DF[i, j] = 0;
}
}
horizontal();
vertical();
diagonalBackward();
diagonalForward();
maxSol();
}
static
public
void
Main(
string
[] args)
{
solution();
}
}