import sys
def main():
mod = 1000000007
data = sys.stdin.buffer.read().split()
it = iter(data)
N = int(next(it))
M = int(next(it))
size = 1 << M
dp = [0] * size
for _ in range(N):
k = int(next(it))
mask = 0
for _ in range(k):
t = int(next(it))
mask |= 1 << (t - 1)
dp[mask] += 1
f = dp[:]
for i in range(M):
bit = 1 << i
step = bit << 1
for base in range(0, size, step):
mid = base + bit
end = base + step
if end > size:
end = size
for j in range(mid, end):
f[j] += f[j - bit]
full = size - 1
res = 0
for S in range(size):
if (S.bit_count() & 1) == 0:
sign = 1
else:
sign = -1
exp = f[full ^ S]
res = (res + sign * pow(2, exp, mod)) % mod
sys.stdout.write(str(res % mod))
if __name__ == '__main__':
main()
aW1wb3J0IHN5cwoKZGVmIG1haW4oKToKICAgIG1vZCA9IDEwMDAwMDAwMDcKICAgIGRhdGEgPSBzeXMuc3RkaW4uYnVmZmVyLnJlYWQoKS5zcGxpdCgpCiAgICBpdCA9IGl0ZXIoZGF0YSkKICAgIE4gPSBpbnQobmV4dChpdCkpCiAgICBNID0gaW50KG5leHQoaXQpKQogICAgc2l6ZSA9IDEgPDwgTQogICAgCiAgICBkcCA9IFswXSAqIHNpemUKICAgIGZvciBfIGluIHJhbmdlKE4pOgogICAgICAgIGsgPSBpbnQobmV4dChpdCkpCiAgICAgICAgbWFzayA9IDAKICAgICAgICBmb3IgXyBpbiByYW5nZShrKToKICAgICAgICAgICAgdCA9IGludChuZXh0KGl0KSkKICAgICAgICAgICAgbWFzayB8PSAxIDw8ICh0IC0gMSkKICAgICAgICBkcFttYXNrXSArPSAxCgogICAgZiA9IGRwWzpdCgogICAgZm9yIGkgaW4gcmFuZ2UoTSk6CiAgICAgICAgYml0ID0gMSA8PCBpCiAgICAgICAgc3RlcCA9IGJpdCA8PCAxCiAgICAgICAgZm9yIGJhc2UgaW4gcmFuZ2UoMCwgc2l6ZSwgc3RlcCk6CiAgICAgICAgICAgIG1pZCA9IGJhc2UgKyBiaXQKICAgICAgICAgICAgZW5kID0gYmFzZSArIHN0ZXAKICAgICAgICAgICAgaWYgZW5kID4gc2l6ZToKICAgICAgICAgICAgICAgIGVuZCA9IHNpemUKICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UobWlkLCBlbmQpOgogICAgICAgICAgICAgICAgZltqXSArPSBmW2ogLSBiaXRdCgogICAgZnVsbCA9IHNpemUgLSAxCiAgICByZXMgPSAwCiAgICBmb3IgUyBpbiByYW5nZShzaXplKToKICAgICAgICBpZiAoUy5iaXRfY291bnQoKSAmIDEpID09IDA6CiAgICAgICAgICAgIHNpZ24gPSAxCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2lnbiA9IC0xCiAgICAgICAgZXhwID0gZltmdWxsIF4gU10KICAgICAgICByZXMgPSAocmVzICsgc2lnbiAqIHBvdygyLCBleHAsIG1vZCkpICUgbW9kCiAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cihyZXMgJSBtb2QpKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo=