Buggy python submission (verdict: Time Limit Exceeded):
INF = 10**9
n, m = map(int, input().split())
keys = []
for _ in range(m):
    a, _ = map(int, input().split())
    c = 0
    for i in input().split():
        c += 2**(int(i)-1)
    keys.append((a, c))

dp = [INF]*(2**n)
dp[0] = 0
for a, c in keys:
    tmp = [INF]*(2**n)
    for j, d in enumerate(dp):
        if d == INF:
            continue
        tmp[j] = min(tmp[j], d)
        tmp[j|c] = min(tmp[j|c], d+a)
    dp = tmp

print(dp[-1] if dp[-1]<INF else -1)


Fixed submission:
INF = 10**9
n, m = map(int, input().split())
keys = []
for _ in range(m):
    a, _ = map(int, input().split())
    c = 0
    for i in input().split():
        c += 2**(int(i)-1)
    keys.append((a, c))

dp = [INF]*(2**n)
dp[0] = 0
for a, c in keys:
    tmp = [INF]*(2**n)
    for j, d in enumerate(dp):
        if d == INF:
            continue
        if d < tmp[j]:
            tmp[j] = d
        if d+a < tmp[j|c]:
            tmp[j|c] = d+a
    dp = tmp

print(dp[-1] if dp[-1]<INF else -1)

Buggy python submission (verdict: Time Limit Exceeded):
INF = 10**9
n, m = map(int, input().split())
keys = []
for _ in range(m):
    a, _ = map(int, input().split())
    c = 0
    for i in input().split():
        c += 2**(int(i)-1)
    keys.append((a, c))

dp = [INF]*(2**n)
dp[0] = 0
for a, c in keys:
    tmp = [INF]*(2**n)
    for j in range(2**n):
        if dp[j] == INF:
            continue
        tmp[j] = min(tmp[j], dp[j])
        tmp[j|c] = min(tmp[j|c], dp[j]+a)
    dp = tmp

print(dp[-1] if dp[-1]<INF else -1)


Fixed submission:
INF = 10**9
n, m = map(int, input().split())
keys = []
for _ in range(m):
    a, _ = map(int, input().split())
    c = 0
    for i in input().split():
        c += 2**(int(i)-1)
    keys.append((a, c))

dp = [INF]*(2**n)
dp[0] = 0
for a, c in keys:
    tmp = [INF]*(2**n)
    for j, d in enumerate(dp):
        if d == INF:
            continue
        if d < tmp[j]:
            tmp[j] = d
        if d+a < tmp[j|c]:
            tmp[j|c] = d+a
    dp = tmp

print(dp[-1] if dp[-1]<INF else -1)

Buggy python submission (verdict: Time Limit Exceeded):
INF = 10**9
n, m = map(int, input().split())
dp = [INF]*(2**n)
dp[0] = 0
for _ in range(m):
    a, _ = map(int, input().split())
    c = 0
    for i in input().split():
        c += 2**(int(i)-1)
    tmp = [INF]*(2**n)
    for j in range(2**n):
        tmp[j] = min(tmp[j], dp[j])
        tmp[j|c] = min(tmp[j|c], dp[j]+a)
    dp = tmp

print(dp[-1] if dp[-1]<INF else -1)


Fixed submission:
INF = 10**9
n, m = map(int, input().split())
keys = []
for _ in range(m):
    a, _ = map(int, input().split())
    c = 0
    for i in input().split():
        c += 2**(int(i)-1)
    keys.append((a, c))

dp = [INF]*(2**n)
dp[0] = 0
for a, c in keys:
    tmp = [INF]*(2**n)
    for j, d in enumerate(dp):
        if d == INF:
            continue
        if d < tmp[j]:
            tmp[j] = d
        if d+a < tmp[j|c]:
            tmp[j|c] = d+a
    dp = tmp

print(dp[-1] if dp[-1]<INF else -1)

Buggy python submission (verdict: Time Limit Exceeded):
INF = 10**9
n, m = map(int, input().split())
keys = []
for _ in range(m):
    a, _ = map(int, input().split())
    c = 0
    for i in input().split():
        c += 2**(int(i)-1)
    keys.append((a, c))

dp = [INF]*(2**n)
dp[0] = 0
for a, c in keys:
    tmp = [INF]*(2**n)
    for j in range(2**n):
        tmp[j] = min(tmp[j], dp[j])
        tmp[j|c] = min(tmp[j|c], dp[j]+a)
    dp = tmp

print(dp[-1] if dp[-1]<INF else -1)


Fixed submission:
INF = 10**9
n, m = map(int, input().split())
keys = []
for _ in range(m):
    a, _ = map(int, input().split())
    c = 0
    for i in input().split():
        c += 2**(int(i)-1)
    keys.append((a, c))

dp = [INF]*(2**n)
dp[0] = 0
for a, c in keys:
    tmp = [INF]*(2**n)
    for j, d in enumerate(dp):
        if d == INF:
            continue
        if d < tmp[j]:
            tmp[j] = d
        if d+a < tmp[j|c]:
            tmp[j|c] = d+a
    dp = tmp

print(dp[-1] if dp[-1]<INF else -1)

Buggy python submission (verdict: Time Limit Exceeded):
import sys
sys.setrecursionlimit(10000)
n, m = map(int, input().split())
keys = []
for _ in range(m):
    a, b = map(int, input().split())
    c = set(map(int, input().split()))
    keys.append((a, c))

ans = 10**7

def solve(i, cost, key_set):
    global ans
    if i==m:
        return
    tmp = key_set.copy()
    tmp |= keys[i][1]
    if len(tmp)==n:
        ans = min(ans, cost+keys[i][0])
    else:
        solve(i+1, cost+keys[i][0], tmp)
    solve(i+1, cost, key_set)

solve(0, 0, set())
print(ans if ans<10**7 else -1)

Fixed submission:
INF = 10**9
n, m = map(int, input().split())
keys = []
for _ in range(m):
    a, _ = map(int, input().split())
    c = 0
    for i in input().split():
        c += 2**(int(i)-1)
    keys.append((a, c))

dp = [INF]*(2**n)
dp[0] = 0
for a, c in keys:
    tmp = [INF]*(2**n)
    for j, d in enumerate(dp):
        if d == INF:
            continue
        if d < tmp[j]:
            tmp[j] = d
        if d+a < tmp[j|c]:
            tmp[j|c] = d+a
    dp = tmp

print(dp[-1] if dp[-1]<INF else -1)