# https://atcoder.jp/contests/abc142/tasks/abc142_e
# このナップサックdpは面白い！
# 配るdpをイメージするとわかりやすい
# dp[i][bit] ... [0,i)の鍵を考慮したときに状態bitであるための最小の費用
# bitは開けられる宝箱を2進数で示している。5(101)だったら、0,2の宝箱が開けられる。
import sys
read = sys.stdin.readline


def read_ints():
    return list(map(int, read().split()))


def as_bit(ls):
    # 開けられる宝箱をbitで示す
    ret = 0
    for l in ls:
        ret ^= 1 << (l - 1)
    return ret


from itertools import product
INF = 10**9
N, M = read_ints()
C = []
A = []
for _ in range(M):
    a, b = read_ints()
    A.append(a)
    c = read_ints()
    C.append(as_bit(c))

'''
dp[i][bit] ... [0,i)の鍵を考慮したときに状態bitであるための最小の費用
bitは開けられる宝箱を2進数で示している。5(101)だったら、0,2の宝箱が開けられる。

更新則
dp[i+1][bit|C[i]] = min(dp[i+1][bit|C[i]], dp[i][bit] + A[i]) # i番目を取る
dp[i+1][bit] = min(dp[i+1][bit], dp[i][bit]) #i番目を取らない
∵配るDP。ナンプサックDPの重さの更新がbit演算に置き換わっただけ

初期条件&境界条件
dp[i][bit]=INF
dp[i][0]=0
'''

dp = [[INF] * (2 ** N) for _ in range(M + 1)]

for i in range(M + 1):
    dp[i][0] = 0

for i, bit in product(range(M), range(2 ** N)):
    dp[i + 1][bit | C[i]] = min(dp[i + 1][bit | C[i]], dp[i][bit] + A[i])
    dp[i + 1][bit] = min(dp[i + 1][bit], dp[i][bit])

ans = dp[-1][-1]
print(ans if ans != INF else -1) import sys sys read = sys.stdin.readline read sys.stdin.readline sys.stdin sys stdin readline def read_ints():
    return list(map(int, read().split())) read_ints return list(map(int, read().split())) list(map(int, read().split())) list map(int, read().split()) map int read().split() ().split () read split def as_bit(ls):
    # 開けられる宝箱をbitで示す
    ret = 0
    for l in ls:
        ret ^= 1 << (l - 1)
    return ret as_bit ret = 0 ret 0 for l in ls:
        ret ^= 1 << (l - 1)
     l ls ret ^= 1 << (l - 1) ret 1 << (l - 1) 1 l - 1 l 1 return ret ret ls ls from itertools import product INF = 10**9 INF 10**9 10 9 N, M = read_ints() N read_ints() read_ints M C = [] C [] A = [] A [] for _ in range(M):
    a, b = read_ints()
    A.append(a)
    c = read_ints()
    C.append(as_bit(c)) _ range(M) range M a, b = read_ints() a read_ints() read_ints b A.append(a) A.append A append a c = read_ints() c read_ints() read_ints C.append(as_bit(c)) C.append C append as_bit(c) as_bit c '''
dp[i][bit] ... [0,i)の鍵を考慮したときに状態bitであるための最小の費用
bitは開けられる宝箱を2進数で示している。5(101)だったら、0,2の宝箱が開けられる。

更新則
dp[i+1][bit|C[i]] = min(dp[i+1][bit|C[i]], dp[i][bit] + A[i]) # i番目を取る
dp[i+1][bit] = min(dp[i+1][bit], dp[i][bit]) #i番目を取らない
∵配るDP。ナンプサックDPの重さの更新がbit演算に置き換わっただけ

初期条件&境界条件
dp[i][bit]=INF
dp[i][0]=0
''' [INF] * (2 ** N) for _ in range(M + 1) for _ in range(M + 1) _ range(M + 1) range M + 1 M 1 for _ in range(M + 1) [INF] * (2 ** N) [INF] INF 2 ** N 2 N dp = [[INF] * (2 ** N) for _ in range(M + 1)] dp [[INF] * (2 ** N) for _ in range(M + 1)] for i in range(M + 1):
    dp[i][0] = 0 i range(M + 1) range M + 1 M 1 dp[i][0] = 0 dp[i][0] [i] dp i 0 0 for i, bit in product(range(M), range(2 ** N)):
    dp[i + 1][bit | C[i]] = min(dp[i + 1][bit | C[i]], dp[i][bit] + A[i])
    dp[i + 1][bit] = min(dp[i + 1][bit], dp[i][bit]) i bit product(range(M), range(2 ** N)) product range(M) range M range(2 ** N) range 2 ** N 2 N dp[i + 1][bit | C[i]] = min(dp[i + 1][bit | C[i]], dp[i][bit] + A[i]) dp[i + 1][bit | C[i]] [i + 1] dp i + 1 i 1 bit | C[i] bit C[i] C i min(dp[i + 1][bit | C[i]], dp[i][bit] + A[i]) min dp[i + 1][bit | C[i]] [i + 1] dp i + 1 i 1 bit | C[i] bit C[i] C i dp[i][bit] + A[i] dp[i][bit] [i] dp i bit A[i] A i dp[i + 1][bit] = min(dp[i + 1][bit], dp[i][bit]) dp[i + 1][bit] [i + 1] dp i + 1 i 1 bit min(dp[i + 1][bit], dp[i][bit]) min dp[i + 1][bit] [i + 1] dp i + 1 i 1 bit dp[i][bit] [i] dp i bit ans = dp[-1][-1] ans dp[-1][-1] [-1] dp -1 -1 print(ans if ans != INF else -1) print ans if ans != INF else -1 ans != INF ans INF ans -1 b = read_ints() read_ints() b def read_ints():
    return list(map(int, read().split())) def read_ints():
    return list(map(int, read().split())) read_ints ans = dp[-1][-1] dp[-1][-1] ans A = [] [] A c = read_ints() read_ints() c dp = [[INF] * (2 ** N) for _ in range(M + 1)] [[INF] * (2 ** N) for _ in range(M + 1)] dp M = read_ints() read_ints() M def as_bit(ls):
    # 開けられる宝箱をbitで示す
    ret = 0
    for l in ls:
        ret ^= 1 << (l - 1)
    return ret def as_bit(ls):
    # 開けられる宝箱をbitで示す
    ret = 0
    for l in ls:
        ret ^= 1 << (l - 1)
    return ret as_bit N, M = read_ints() read_ints() N a, b = read_ints() read_ints() a C = [] [] C read = sys.stdin.readline sys.stdin.readline read INF = 10**9 10**9 INF
# https://atcoder.jp/contests/abc142/tasks/abc142_e
# このナップサックdpは面白い！
# 配るdpをイメージするとわかりやすい
# dp[i][bit] ... [0,i)の鍵を考慮したときに状態bitであるための最小の費用
# bitは開けられる宝箱を2進数で示している。5(101)だったら、0,2の宝箱が開けられる。
import sys
read = sys.stdin.readline


def read_ints():
    return list(map(int, read().split()))


def as_bit(ls):
    # 開けられる宝箱をbitで示す
    ret = 0
    for l in ls:
        ret ^= 1 << (l - 1)
    return ret


from itertools import product
INF = 10**9
N, M = read_ints()
C = []
A = []
for _ in range(M):
    a, b = read_ints()
    A.append(a)
    c = read_ints()
    C.append(as_bit(c))

'''
dp[i][bit] ... [0,i)の鍵を考慮したときに状態bitであるための最小の費用
bitは開けられる宝箱を2進数で示している。5(101)だったら、0,2の宝箱が開けられる。

更新則
dp[i+1][bit|C[i]] = min(dp[i+1][bit|C[i]], dp[i][bit] + A[i]) # i番目を取る
dp[i+1][bit] = min(dp[i+1][bit], dp[i][bit]) #i番目を取らない
∵配るDP。ナンプサックDPの重さの更新がbit演算に置き換わっただけ

初期条件&境界条件
dp[i][bit]=INF
dp[i][0]=0
'''

dp = [[INF] * (2 ** N) for _ in range(M + 1)]

for i in range(M + 1):
    dp[i][0] = 0

for i, bit in product(range(M), range(2 ** N)):
    dp[i + 1][bit | C[i]] = min(dp[i + 1][bit | C[i]], dp[i][bit] + A[i])
    dp[i + 1][bit] = min(dp[i + 1][bit], dp[i][bit])

ans = dp[-1][-1]
print(ans if ans != INF else -1)
