using
System;
public
class
GFG {
const
int
mod = 1000000007;
static
int
[, ] dp =
new
int
[100001, 2];
static
int
recur(
int
i,
int
j,
int
[][] Arr,
int
N)
{
if
(dp[i, j] != -1)
return
dp[i, j];
if
(i == N)
return
1;
int
ans = 0;
if
(i == 0 || Arr[i - 1][j] != Arr[i][0])
ans = (ans + recur(i + 1, 0, Arr, N)) % mod;
if
(i == 0 || Arr[i - 1][j] != Arr[i][1])
ans = (ans + recur(i + 1, 1, Arr, N)) % mod;
return
dp[i, j] = ans;
}
static
void
findWays(
int
[] A,
int
[] B,
int
N)
{
for
(
int
i = 0; i < 100001; i++)
for
(
int
j = 0; j < 2; j++)
dp[i, j] = -1;
int
[][] Arr =
new
int
[N][];
for
(
int
i = 0; i < N; i++) {
Arr[i] =
new
int
[2];
Arr[i][0] = A[i];
Arr[i][1] = B[i];
}
Console.WriteLine(recur(0, 0, Arr, N));
}
public
static
void
Main()
{
int
[] A = { 1, 4, 3 }, B = { 2, 2, 4 };
int
N = A.Length;
findWays(A, B, N);
int
[] A1 = { 1, 2, 3, 4 }, B1 = { 5, 6, 7, 8 };
int
N1 = A1.Length;
findWays(A1, B1, N1);
}
}