Problem p03128 (python)

Fixed submission:
N,M=map(int,input().split())
A=list(map(int,input().split()))
A.sort()

if 1 in A:
    if N%2==0:
        print("1"*(N//2))
    else:
        if 7 in A:
            print("7"+"1"*(N//2-1))
        elif 5 in A:
            print("5"+"1"*(N//2-2))
        elif 3 in A:
            print("3"+"1"*(N//2-2))
        elif 2 in A:
            print("2"+"1"*(N//2-2))
        else:
            print("8"+"1"*(N//2-3))
else:
    B=[[] for i in range(0,10)]
    for i in range(0,M):
        if 2 in A:
            B[5].append(2)
        if 3 in A:
            B[5].append(3)
        if 4 in A:
            B[4].append(4)
        if 5 in A:
            B[5].append(5)
        if 6 in A:
            B[6].append(6)
        if 7 in A:
            B[3].append(7)
        if 8 in A:
            B[7].append(8)
        if 9 in A:
            B[6].append(9)


    dp=['n' for i in range(0,max(10,N+1))]
    for i in range(0,min(N+1,10)):
        if i==2:
            if 2 in A:
                dp[5]='2'
        if i==3:
            if 3 in A:
                dp[5]='3'
        if i==4:
            if 4 in A:
                dp[4]='4'
        if i==5:
            if 5 in A:
                dp[5]='5'
        if i==6:
            if 6 in A:
                dp[6]='6'
        if i==7:
            if 7 in A:
                dp[3]='7'
        if i==8:
            if 8 in A:
                dp[7]='8'
        if i==9:
            if 9 in A:
                dp[6]='9'

    if N>=6:
        a='0'
        b='0'
        c='0'
        if B[3]!=[]:
            b='77'
        if dp[6]=='n':
            a=int(a)
            b=int(b)
            c=int(c)
            x=max(a,b,c)
            if x!=0:
                dp[6]=str(x)
        else:
            a=int(a)
            b=int(b)
            c=int(c)
            d=int(dp[6])
            dp[6]=str(max(a,b,c,d))

    if N>=7:
        a='0'
        b='0'
        c='0'
        d='0'
        if B[3]!=[] and dp[4]!='n':
            b='7'+dp[4]
        if B[4]!=[] and dp[3]!='n':
            c='47'
        if dp[7]=='n':
            a=int(a)
            b=int(b)
            c=int(c)
            d=int(d)
            x=max(a,b,c,d)
            if x!=0:
                dp[7]=str(x)
        else:
            a=int(a)
            b=int(b)
            c=int(c)
            d=int(d)
            e=int(dp[7])
            dp[7]=str(max(e,a,b,c,d))

    for i in range(8,N+1):
        a='0'
        b='0'
        c='0'
        d='0'
        e='0'
        f='0'
        if B[3] and dp[i-3]!='n':
            b='7'+dp[i-3]
        if B[4] and dp[i-4]!='n':
            c='4'+dp[i-4]
        if B[5] and dp[i-5]!='n':
            d=str(max(B[5]))+dp[i-5]
        if B[6] and dp[i-6]!='n':
            e=str(max(B[6]))+dp[i-6]
        if B[7] and dp[i-7]!='n':
            f='8'+dp[i-7]
        a=int(a)
        b=int(b)
        c=int(c)
        d=int(d)
        e=int(e)
        f=int(f)
        x=max(a,b,c,d,e,f)
        if x==0:
            dp[i]='n'
        else:
            dp[i]=str(x)
    print(int(dp[N]))

Buggy submission (verdict: Runtime Error):
N,M=map(int,input().split())
A=list(map(int,input().split()))
A.sort()
B=[[] for i in range(0,10)]
for i in range(0,M):
    if 1 in A:
        B[2].append(1)
    if 2 in A:
        B[5].append(2)
    if 3 in A:
        B[5].append(3)
    if 4 in A:
        B[4].append(4)
    if 5 in A:
        B[5].append(5)
    if 6 in A:
        B[6].append(6)
    if 7 in A:
        B[3].append(7)
    if 8 in A:
        B[7].append(8)
    if 9 in A:
        B[6].append(9)


dp=['n' for i in range(0,N+1)]
if 1 in A:
    dp[2]='1'
if 2 in A:
    dp[5]='2'
if 3 in A:
    dp[5]='3'
if 4 in A:
    dp[4]='4'
if 5 in A:
    dp[5]='5'
if 6 in A:
    dp[6]='6'
if 7 in A:
    dp[3]='7'
if 8 in A:
    dp[7]='8'
if 9 in A:
    dp[6]='9'
for i in range(4,N+1):
    if i==4:
        if B[2]!=[]:
            dp[4]='11'
    if i==5:
        if B[3]!=[] and dp[2]!='n':
            dp[5]='71'
    if i==6:
        a='0'
        b='0'
        c='0'
        if B[2]!=[] and dp[4]!='n':
            a='1'+dp[4]
        if B[3]!=[]:
            b='77'
        if B[4]!=[] and dp[2]!='n':
            c='41'
        if dp[6]=='n':
            a=int(a)
            b=int(b)
            c=int(c)
            x=max(a,b,c)
            if x!=0:
                dp[6]=str(x)
        else:
            a=int(a)
            b=int(b)
            c=int(c)
            d=int(dp[6])
            dp[6]=str(max(a,b,c,d))
    if i==7:
        a='0'
        b='0'
        c='0'
        d='0'
        if B[2]!=[] and dp[5]!='n':
            a='1'+dp[5]
        if B[3]!=[] and dp[4]!='n':
            b='7'+dp[4]
        if B[4]!=[] and dp[3]!='n':
            c='47'
        if B[5]!=[] and dp[2]!='n':
            d=str(max(B[5]))+'1'
        if dp[7]=='n':
            a=int(a)
            b=int(b)
            c=int(c)
            d=int(d)
            x=max(a,b,c,d)
            if x!=0:
                dp[7]=str(x)
        else:
            a=int(a)
            b=int(b)
            c=int(c)
            d=int(d)
            e=int(dp[7])
            dp[7]=str(max(e,a,b,c,d))
    if i>7:
        a='0'
        b='0'
        c='0'
        d='0'
        e='0'
        f='0'
        if B[2]!=[] and dp[i-2]!='n':
            a='1'+dp[i-2]
        if B[3]!=[] and dp[i-3]!='n':
            b='7'+dp[i-3]
        if B[4]!=[] and dp[i-4]!='n':
            c='4'+dp[i-4]
        if B[5]!=[] and dp[i-5]!='n':
            d=str(max(B[5]))+dp[i-5]
        if B[6]!=[] and dp[i-6]!='n':
            e=str(max(B[6]))+dp[i-6]
        if B[7]!=[] and dp[i-7]!='n':
            f='8'+dp[i-7]
        a=int(a)
        b=int(b)
        c=int(c)
        d=int(d)
        e=int(e)
        f=int(f)
        x=max(a,b,c,d,e,f)
        if x==0:
            dp[i]='n'
        else:
            dp[i]=str(x)
print(int(dp[N]))

Buggy submission (verdict: Runtime Error):
N,M=map(int,input().split())
A=list(map(int,input().split()))
A.sort()
B=[[] for i in range(0,10)]
for i in range(0,M):
    if 1 in A:
        B[2].append(1)
    if 2 in A:
        B[5].append(2)
    if 3 in A:
        B[5].append(3)
    if 4 in A:
        B[4].append(4)
    if 5 in A:
        B[5].append(5)
    if 6 in A:
        B[6].append(6)
    if 7 in A:
        B[3].append(7)
    if 8 in A:
        B[7].append(8)
    if 9 in A:
        B[6].append(9)


dp=['n' for i in range(0,N+1)]
if 1 in A:
    dp[2]=1
if 2 in A:
    dp[5]=2
if 3 in A:
    dp[5]=3
if 4 in A:
    dp[4]=4
if 5 in A:
    dp[5]=5
if 6 in A:
    dp[6]=6
if 7 in A:
    dp[3]=7
if 8 in A:
    dp[7]=8
if 9 in A:
    dp[6]=9
for i in range(4,N+1):
    if i==4:
        if B[2]!=[]:
            dp[4]=11
    if i==5:
        if B[3]!=[] and dp[2]!='n':
            dp[5]=71
    if i==6:
        a=0
        b=0
        c=0
        if B[2]!=[] and dp[4]!='n':
            a=1*10**len(str(dp[4]))+dp[4]
        if B[3]!=[]:
            b=77
        if B[4]!=[] and dp[2]!='n':
            c=41
        if dp[6]=='n':
            x=max(a,b,c)
            if x!=0:
                dp[6]=x
        else:
            dp[6]=max(a,b,c,dp[6])
    if i==7:
        a=0
        b=0
        c=0
        d=0
        if B[2]!=[] and dp[5]!='n':
            a=1*10**len(str(dp[5]))+dp[5]
        if B[3]!=[] and dp[4]!='n':
            b=7*10**len(str(dp[4]))+dp[4]
        if B[4]!=[] and dp[3]!='n':
            c=47
        if B[5]!=[] and dp[2]!='n':
            d=max(B[5])*10+1
        if dp[7]=='n':
            x=max(a,b,c,d)
            if x!=0:
                dp[7]=x
        else:
            dp[7]=max(dp[7],a,b,c,d)
    if i>7:
        a=0
        b=0
        c=0
        d=0
        e=0
        f=0
        if B[2]!=[] and dp[i-2]!='n':
            a=1*10**(len(str(dp[i-2])))+dp[i-2]
        if B[3]!=[] and dp[i-3]!='n':
            b=7*10**(len(str(dp[i-3])))+dp[i-3]
        if B[4]!=[] and dp[i-4]!='n':
            c=4*10**(len(str(dp[i-4])))+dp[i-4]
        if B[5]!=[] and dp[i-5]!='n':
            d=max(B[5])*10**(len(str(dp[i-5])))+dp[i-5]
        if B[6]!=[] and dp[i-6]!='n':
            e=max(B[6])*10**(len(str(dp[i-6])))+dp[i-6]
        if B[7]!=[] and dp[i-7]!='n':
            f=8*10**(len(str(dp[i-7])))+dp[i-7]
        x=max(a,b,c,d,e,f)
        if x==0:
            dp[i]='n'
        else:
            dp[i]=x
print(dp[N])