using
System;
class
GFG{
static
void
numberOfSubarrays(
int
[] arr,
int
n)
{
int
[,] next =
new
int
[n, 2];
int
[,] next_to_next =
new
int
[n, 2];
int
f = -1;
int
s = -1;
for
(
int
i = n - 1; i >= 0; i--)
{
next[i, 0] = arr[i];
next_to_next[i, 0] = arr[i];
if
(arr[i] % 2 == 0)
{
s = f;
f = i;
}
next[i, 1] = f;
next_to_next[i, 1] = s;
}
int
total = 0;
for
(
int
i = 0; i < n; i++)
{
int
calculate;
if
(next[i, 0] % 4 == 0)
{
calculate = n - i;
total += calculate;
}
else
if
((next[i, 0] & 1) == 1)
{
if
(next[i, 1] == -1)
{
calculate = n - i;
total += calculate;
}
else
{
if
(next_to_next[i, 1] == -1 &&
next[next[i, 1], 0] % 4 != 0)
{
calculate = next[i, 1] - i;
total += calculate;
}
else
if
(next_to_next[i, 1] != -1 &&
next[next[i, 1], 0] % 4 != 0)
{
calculate = n - i;
total += calculate;
total -= next_to_next[i, 1] -
next[i, 1];
}
else
{
calculate = n - i;
total = total + calculate;
}
}
}
else
{
if
(next_to_next[i, 1] == -1)
{
}
else
{
calculate = n - i;
total += calculate;
total = total -
next_to_next[i, 1] + i;
}
}
}
Console.WriteLine(total);
}
static
void
Main()
{
int
[] arr = {2, 5, 6};
int
size = arr.Length;
numberOfSubarrays(arr, size);
}
}