Problem p03013 (python)

Fixed submission:
N,M=map(int,input().split())
a=[0]
for _ in range(M):
    a.append(int(input()))

b=[]
num=0
if len(a)>1:
    b.append(a[1]-a[0]-1)
    for i in range(1,M):
            b.append(a[i+1]-a[i]-2)
    b.append(N-a[M]-1)
else:
    b.append(N)

num=max(b)


mod=1000000007

def fib(n,num):
    fib=[0 for i in range(num+10)]
    fib[0]=1
    fib[1]=1
    for i in range(2,num+1):
        fib[i]=fib[i-1]+fib[i-2]
    return fib[n]

if -1 in b:
    print(0)
else:
    p=1
    for j in range(M+1):
        p*=fib(b[j],num)
    print(p%mod)

Buggy submission (verdict: Runtime Error):
N,M=map(int,input().split())
a=[0]
for _ in range(M):
    a.append(int(input()))

b=[]
b.append(a[1]-a[0]-1)
for i in range(1,M):
    if a[i+1]-a[i]==1:
        b.append(0)
    else:
        b.append(a[i+1]-a[i]-2)
b.append(N-a[M]-1)

num=max(b)

mod=1000000007

def fib(n,num):
    fib=[0 for i in range(num+10)]
    fib[0]=1
    fib[1]=1
    for i in range(2,num+1):
        fib[i]=fib[i-1]+fib[i-2]
    return fib[n]
p=1
for j in range(M+1):
    p*=fib(b[j],num)

if 0 in b[1:]:
    print(0)
else:
    print(p%mod)

Buggy submission (verdict: Runtime Error):
N,M=map(int,input().split())
a=[0]
for _ in range(M):
    a.append(int(input()))

b=[]
b.append(a[1]-a[0]-1)
for i in range(1,M):
    if i==0:
        b.append(1)
    elif a[i+1]-a[i]==1 and i!=0:
        b.append(0)
    else:
        b.append(a[i+1]-a[i]-2)
b.append(N-a[M]-1)

num=max(b)

mod=1000000007

def fib(n,num):
    fib=[0 for i in range(num+1)]
    fib[0]=1
    fib[1]=1
    for i in range(2,num+1):
        fib[i]=fib[i-1]+fib[i-2]
    return fib[n]
p=1
for j in range(M+1):
    p*=fib(b[j],num)

if 0 in b[1:]:
    print(0)
else:
    print(p%mod)

Buggy submission (verdict: Runtime Error):
N,M=map(int,input().split())
a=[int(input()) for _ in range(M)]
 
def count_step(n):
    num=n//2
    count=0
    for i in range(num+1):
        N=n-i
        if i==0:
            count+=1
        elif i==1:
            count+=N
        else:
            nume=1
            denom=1
            for j in range(i):
                nume*=(N-j)
                denom*=(j+1)
            count+=int(nume/denom)
    return count
 
if M!=0:
    a2=[a[0]-1]
    
    for i in range(M-1):
        p=a[i+1]-a[i]-2
        
        a2.append(p)
    
    a2.append(N-a[M-1]-1)
 
p=1
for i in range(M-1):
    if a[i]+1==a[i+1]:
        p=0
        break
 
if p==0:
    pattern=0
else:
    if M==0:
        pattern=count_step(N)
    else:
        pattern=1
        for i in range(len(a2)):
            pattern*=count_step(a2[i])
 
print(int(pattern%1000000007))

Buggy submission (verdict: Runtime Error):
N,M=map(int,input().split())
a=[int(input()) for _ in range(M)]

def count_step(n):
    num=n//2
    count=0
    for i in range(num+1):
        N=n-i
        if i==0:
            count+=1
        elif i==1:
            count+=N
        else:
            nume=1
            denom=1
            for j in range(i):
                nume*=(N-j)
                denom*=(j+1)
            count+=nume/denom
    return count

if M!=0:
    a2=[a[0]-1]
    
    for i in range(M-1):
        p=a[i+1]-a[i]-2
        
        a2.append(p)
    
    a2.append(N-a[M-1]-1)

p=1
for i in range(M-1):
    if a[i]+1==a[i+1]:
        p=0
        break

if p==0:
    pattern=0
else:
    if M==0:
        pattern=count_step(N)
    else:
        pattern=1
        for i in range(len(a2)):
            pattern*=count_step(a2[i])

print(int(pattern%1000000007))

Buggy submission (verdict: Runtime Error):
import math

N,M=map(int,input().split())
a=[int(input()) for _ in range(M)]

def count_step(n):
    num=n//2
    count=0
    for i in range(num+1):
        N=n-i
        if i==0:
            count+=1
        elif i==1:
            count+=N
        else:
            nume=1
            denom=1
            for j in range(i):
                nume*=(N-j)
                denom*=(j+1)
            count+=int(nume/denom)
    return count

if M!=0:
    a2=[a[0]-1]
    
    for i in range(M-1):
        p=a[i+1]-a[i]-2
        
        a2.append(p)
    
    a2.append(N-a[M-1]-1)

p=1
for i in range(M-1):
    if a[i]+1==a[i+1]:
        p=0
        break

if p==0:
    pattern=0
else:
    pattern=1
    if M==0:
        pattern=count_step(N)
    else:
        for i in range(len(a2)):
            pattern*=count_step(a2[i])

print(pattern%1000000007)

Buggy submission (verdict: Runtime Error):
import itertools

N,M=map(int,input().split())
a=[int(input()) for _ in range(M)]

def count_step(n):
    num=n//2
    count=0
    for i in range(num+1):
        step=[]
        for _ in range(n-2*i):
            step.append(1)
        for _ in range(i):
            step.append(2)
        count+=len(list(itertools.combinations(step,i)))
    return count

a2=[a[0]-1]

for i in range(M-1):
    p=a[i+1]-a[i]-2
    
    a2.append(p)

a2.append(N-a[M-1]-1)

p=1
for i in range(M-1):
    if a[i]+1==a[i+1]:
        p=0
        break

if p==0:
    pattern=0
else:
    pattern=1
    for i in range(len(a2)):
        pattern*=count_step(a2[i])

print(pattern%1000000007)