Buggy python submission (verdict: Runtime Error):
import sys

def main():
    N = int(input())
    D = map(lambda i: int(i), input().split(' '))
    answer = 1
    ary = [0] * (N - 1)

    for d in D:
        ary[d] = ary[d] + 1

    # 続いてなかったらNG
    zero = False
    for i in range(len(ary)):
        if ary[i] != 0 and zero is True:
            print(0)
            sys.exit()
        if ary[i] == 0 and zero is False:
            zero = True
            
    for i in range(len(ary)):
        if i == 0:
            if ary[i] != 1:
                print(0)
                sys.exit()
        else:
            answer = (answer * (ary[i - 1] ** ary[i])) % 998244353
    print(answer)

main()


Fixed submission:
import sys

def main():
    N = int(input())
    D = list(map(lambda i: int(i), input().split(' ')))
    # N = 100000
    # D = [0]
    # for i in range(1, N):
    #     D.append(i)

    if D[0] != 0:
        print(0)
        sys.exit()

    ary = [0] * N
    for d in D:
        ary[d] = ary[d] + 1

    # 続いてなかったらNG
    zero = False
    for i in range(len(ary)):
        if ary[i] != 0 and zero is True:
            print(0)
            sys.exit()
        if ary[i] == 0 and zero is False:
            zero = True

    # 距離0は頂点1だけ
    if ary[0] != 1:
        print(0)
        sys.exit()

    answer = 1
    for i in range(1, len(ary)):
        for j in range(ary[i]):
            answer = (answer * ary[i - 1]) % 998244353
    print(answer)

main()

Buggy python submission (verdict: Runtime Error):
import sys

def main():
    N = int(input())
    D = map(lambda i: int(i), input().split(' '))
    maximum = 0
    ary = [0] * (N - 1)
    for d in D:
        ary[d] = ary[d] + 1
        if maximum < d:
            maximum = d
    answer = 1
    for i in range(maximum + 1):
        if i == 0:
            if ary[i] != 1:
                print(0)
                sys.exit()
        elif ary[i] == 0:
            print(0)
            sys.exit()
        else:
            answer = (answer * (ary[i - 1] ** ary[i])) % 998244353
    print(answer)

main()


Fixed submission:
import sys

def main():
    N = int(input())
    D = list(map(lambda i: int(i), input().split(' ')))
    # N = 100000
    # D = [0]
    # for i in range(1, N):
    #     D.append(i)

    if D[0] != 0:
        print(0)
        sys.exit()

    ary = [0] * N
    for d in D:
        ary[d] = ary[d] + 1

    # 続いてなかったらNG
    zero = False
    for i in range(len(ary)):
        if ary[i] != 0 and zero is True:
            print(0)
            sys.exit()
        if ary[i] == 0 and zero is False:
            zero = True

    # 距離0は頂点1だけ
    if ary[0] != 1:
        print(0)
        sys.exit()

    answer = 1
    for i in range(1, len(ary)):
        for j in range(ary[i]):
            answer = (answer * ary[i - 1]) % 998244353
    print(answer)

main()

Buggy python submission (verdict: Runtime Error):
import sys

def main():
    N = int(input())
    D = map(lambda i: int(i), input().split(' '))
    maximum = 0
    ary = [0] * (N - 1)
    for d in D:
        ary[d] = ary[d] + 1
        if maximum < d:
            maximum = d
    answer = 1
    for i in range(maximum + 1):
        if i == 0:
            if ary[i] != 1:
                print(0)
                sys.exit()
        elif ary[i] == 0:
            print(0)
            sys.exit()
        else:
            answer = (answer * (ary[i - 1] ** ary[i])) // 998244353
    print(answer)

main()


Fixed submission:
import sys

def main():
    N = int(input())
    D = list(map(lambda i: int(i), input().split(' ')))
    # N = 100000
    # D = [0]
    # for i in range(1, N):
    #     D.append(i)

    if D[0] != 0:
        print(0)
        sys.exit()

    ary = [0] * N
    for d in D:
        ary[d] = ary[d] + 1

    # 続いてなかったらNG
    zero = False
    for i in range(len(ary)):
        if ary[i] != 0 and zero is True:
            print(0)
            sys.exit()
        if ary[i] == 0 and zero is False:
            zero = True

    # 距離0は頂点1だけ
    if ary[0] != 1:
        print(0)
        sys.exit()

    answer = 1
    for i in range(1, len(ary)):
        for j in range(ary[i]):
            answer = (answer * ary[i - 1]) % 998244353
    print(answer)

main()