N, M = list(map(int, input().split()))

#a = [int(input()) for _ in range(M)]

issafe = [True] * (N + 1)

for i in range(M):

    issafe[int(eval(input()))] = False



dp = [0] * (N + 1)

dp[0] = 1

if issafe[1]:

    dp[1] = 1



mod = 1000000007

for i in range(2, N + 1):

    if issafe[i - 1]:

        dp[i] += dp[i - 1]

    if issafe[i - 2]:

        dp[i] += dp[i - 2]

    dp[i] = dp[i] %mod



print((dp[N]))
n, m = list(map(int, input().split()))

a = [int(eval(input())) for _ in range(m)]

dp = [0] * (n + 1)

for i in range(m):

    dp[a[i]] = -1

#dp

mod = 10 ** 9 + 7

dp[0] = 1

if dp[1] != -1:

    dp[1] = 1

for i in range(2, n + 1):

    if dp[i - 1] == -1 and dp[i - 2] == -1:

        print((0))

        quit()

    if dp[i] == -1:

        continue

    if dp[i - 1] == -1:

        dp[i] = dp[i - 2]

    elif dp[i - 2] == -1:

        dp[i] = dp[i - 1]

    #dp[i] = max(dp[i - 1], dp[i - 2])

    else:

        dp[i] = dp[i - 1] + dp[i - 2]

    dp[i] %= mod 

    #dp[i] %= mod

#dp[n]

if dp[n] == -1:

    print((0))

else:

    print((dp[n]))
N, M = list(map(int, input().split()))
# a = [int(input()) for _ in range(M)]
issafe = [True] * (N + 1)
for i in range(M):
    issafe[int(eval(input()))] = False
dp = [0] * (N + 1)
dp[0] = 1
if issafe[1]:
    dp[1] = 1
mod = 1000000007
for i in range(2, N + 1):
    if issafe[i - 1]:
        dp[i] += dp[i - 1]
    if issafe[i - 2]:
        dp[i] += dp[i - 2]
    dp[i] = dp[i] % mod
print((dp[N]))

n, m = list(map(int, input().split()))
a = [int(eval(input())) for _ in range(m)]
dp = [0] * (n + 1)
for i in range(m):
    dp[a[i]] = -1
# dp
mod = 10**9 + 7
dp[0] = 1
if dp[1] != -1:
    dp[1] = 1
for i in range(2, n + 1):
    if dp[i - 1] == -1 and dp[i - 2] == -1:
        print((0))
        quit()
    if dp[i] == -1:
        continue
    if dp[i - 1] == -1:
        dp[i] = dp[i - 2]
    elif dp[i - 2] == -1:
        dp[i] = dp[i - 1]
    # dp[i] = max(dp[i - 1], dp[i - 2])
    else:
        dp[i] = dp[i - 1] + dp[i - 2]
    dp[i] %= mod
    # dp[i] %= mod
# dp[n]
if dp[n] == -1:
    print((0))
else:
    print((dp[n]))

-N, M = list(map(int, input().split())) -# a = [int(input()) for _ in range(M)] -issafe = [True] * (N + 1) -for i in range(M): -    issafe[int(eval(input()))] = False -dp = [0] * (N + 1) +n, m = list(map(int, input().split())) +a = [int(eval(input())) for _ in range(m)] +dp = [0] * (n + 1) +for i in range(m): +    dp[a[i]] = -1 +# dp +mod = 10**9 + 7 -if issafe[1]: +if dp[1] != -1: -mod = 1000000007 -for i in range(2, N + 1): -    if issafe[i - 1]: -        dp[i] += dp[i - 1] -    if issafe[i - 2]: -        dp[i] += dp[i - 2] -    dp[i] = dp[i] % mod -print((dp[N])) +for i in range(2, n + 1): +    if dp[i - 1] == -1 and dp[i - 2] == -1: +        print((0)) +        quit() +    if dp[i] == -1: +        continue +    if dp[i - 1] == -1: +        dp[i] = dp[i - 2] +    elif dp[i - 2] == -1: +        dp[i] = dp[i - 1] +    # dp[i] = max(dp[i - 1], dp[i - 2]) +    else: +        dp[i] = dp[i - 1] + dp[i - 2] +    dp[i] %= mod +    # dp[i] %= mod +# dp[n] +if dp[n] == -1: +    print((0)) +else: +    print((dp[n]))