using
System;
using
System.Collections.Generic;
class
GFG
{
static
long
mod = 1000000007;
static
long
Solve(
string
str,
int
n,
int
index, List<
long
> dp)
{
if
(index >= n)
{
return
1;
}
if
(dp[index] != -1)
{
return
dp[index];
}
long
answer = 0;
if
(str[index] ==
'b'
)
{
if
(index + 1 < n && str[index + 1] ==
'b'
)
{
long
opt1 = Solve(str, n, index + 1, dp) % mod;
long
opt2 = Solve(str, n, index + 2, dp) % mod;
answer = (answer + opt1) % mod;
answer = (answer + opt2) % mod;
}
else
{
answer = Solve(str, n, index + 1, dp) % mod;
}
}
else
if
(str[index] ==
'd'
)
{
if
(index + 1 < n && str[index + 1] ==
'd'
)
{
long
opt1 = Solve(str, n, index + 1, dp) % mod;
long
opt2 = Solve(str, n, index + 2, dp) % mod;
answer = (answer + opt1) % mod;
answer = (answer + opt2) % mod;
}
else
{
answer = Solve(str, n, index + 1, dp) % mod;
}
}
else
{
answer = Solve(str, n, index + 1, dp) % mod;
}
return
dp[index] = answer % mod;
}
public
static
void
Main(
string
[] args)
{
string
str =
"gfgbbndd"
;
int
n = str.Length;
bool
found =
false
;
for
(
int
i = 0; i < n; i++)
{
if
(str[i] ==
'a'
|| str[i] ==
'c'
)
{
found =
true
;
break
;
}
}
if
(found)
{
Console.WriteLine(0);
return
;
}
List<
long
> dp =
new
List<
long
>(
new
long
[n]);
for
(
int
i = 0; i < n; i++)
{
dp[i] = -1;
}
long
ans = Solve(str, n, 0, dp);
Console.WriteLine(ans);
}
}