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

aset = set([int(eval(input())) for _ in range(M)])

dp = [0] * (N + 1)

dp[0] = 1

for i in range(N):

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

        if j not in aset:

            dp[j] += dp[i]

            dp[j] %= 10**9 + 7

print((dp[N]))

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

aset = set([int(eval(input())) for _ in range(M)])

dp = [0] * (N + 1)

dp[0] = 1

if 1 not in aset:

    dp[1] = 1

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

    if i in aset:

        dp[i] = 0

    else:

        dp[i] = (dp[i - 1] + dp[i - 2]) % (10**9 + 7)

print((dp[-1]))

N, M = list(map(int, input().split()))
aset = set([int(eval(input())) for _ in range(M)])
dp = [0] * (N + 1)
dp[0] = 1
for i in range(N):
    for j in range(i + 1, min(N, i + 2) + 1):
        if j not in aset:
            dp[j] += dp[i]
            dp[j] %= 10**9 + 7
print((dp[N]))

N, M = list(map(int, input().split()))
aset = set([int(eval(input())) for _ in range(M)])
dp = [0] * (N + 1)
dp[0] = 1
if 1 not in aset:
    dp[1] = 1
for i in range(2, N + 1):
    if i in aset:
        dp[i] = 0
    else:
        dp[i] = (dp[i - 1] + dp[i - 2]) % (10**9 + 7)
print((dp[-1]))

-for i in range(N): -    for j in range(i + 1, min(N, i + 2) + 1): -        if j not in aset: -            dp[j] += dp[i] -            dp[j] %= 10**9 + 7 -print((dp[N])) +if 1 not in aset: +    dp[1] = 1 +for i in range(2, N + 1): +    if i in aset: +        dp[i] = 0 +    else: +        dp[i] = (dp[i - 1] + dp[i - 2]) % (10**9 + 7) +print((dp[-1]))