using
System;
public
class
GFG {
static
int
[, ] dp =
new
int
[100001, 3];
static
int
recur(
int
i,
int
j,
char
[] arr,
int
N)
{
if
(i == N + 1) {
if
(j == 1)
return
1;
else
return
0;
}
if
(dp[i, j + 1] != -1)
return
dp[i, j + 1];
int
ans = 0;
if
(j == -1) {
ans += recur(i + 1, 0, arr, N);
ans += recur(i + 1, 1, arr, N);
}
else
{
if
(arr[i - 1] ==
'&'
) {
ans += recur(i + 1, j & 1, arr, N);
ans += recur(i + 1, j & 0, arr, N);
}
else
{
ans += recur(i + 1, j | 1, arr, N);
ans += recur(i + 1, j | 0, arr, N);
}
}
return
dp[i, j + 1] = ans;
}
static
void
CountWaysBinaryArrayY(
char
[] arr,
int
N)
{
for
(
int
i = 0; i < dp.GetLength(0); i++) {
for
(
int
j = 0; j < dp.GetLength(1); j++) {
dp[i, j] = -1;
}
}
Console.WriteLine(recur(0, -1, arr, N));
}
static
void
Main(
string
[] args)
{
char
[] arr = {
'&'
,
'|'
};
int
N = arr.Length;
CountWaysBinaryArrayY(arr, N);
char
[] arr1 = {
'|'
,
'|'
,
'|'
,
'|'
,
'|'
};
int
N1 = arr1.Length;
CountWaysBinaryArrayY(arr1, N1);
}
}