#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define bit(mask, i) ((mask >> i) & 1)
#define BIT(n) (1ll << n)
#define set_off(mask, i) (mask & ~BIT(i))
using namespace std;
const int maxn = 1e6;
const int maxm = 20;
const int MOD = 1e9 + 7;
int n, m;
ll dp[BIT(maxm)], p2[BIT(maxm) + 10], ans = 0;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("CNKCE.INP", "r"))
{
freopen("CNKCE.INP", "r", stdin);
freopen("CNKCE.OUT", "w", stdout);
}
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
ll mask = 0;
int k;
cin >> k;
for (int j = 1; j <= k; j++)
{
int x;
cin >> x;
x--;
mask += BIT(x);
}
dp[mask]++;
}
for (int i = 0; i < m; i++)
for (int mask = 0; mask < BIT(m); mask++)
if (bit(mask, i))
dp[mask] += dp[set_off(mask, i)];
p2[0] = 1;
for (int i = 1; i <= BIT(maxm); i++)
p2[i] = p2[i - 1] * 2 % MOD;
for (int mask = 0; mask < BIT(m); mask++)
if (__builtin_popcount(mask) % 2 == m % 2)
{
ans += p2[dp[mask]] - 1;
ans %= MOD;
}
else
{
ans -= p2[dp[mask]] - 1;
ans %= MOD;
}
cout << (ans + MOD) % MOD;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIGJpdChtYXNrLCBpKSAoKG1hc2sgPj4gaSkgJiAxKQojZGVmaW5lIEJJVChuKSAoMWxsIDw8IG4pCiNkZWZpbmUgc2V0X29mZihtYXNrLCBpKSAobWFzayAmIH5CSVQoaSkpCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IG1heG4gPSAxZTY7CmNvbnN0IGludCBtYXhtID0gMjA7CmNvbnN0IGludCBNT0QgPSAxZTkgKyA3OwoKaW50IG4sIG07CmxsIGRwW0JJVChtYXhtKV0sIHAyW0JJVChtYXhtKSArIDEwXSwgYW5zID0gMDsKCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4oIkNOS0NFLklOUCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3BlbigiQ05LQ0UuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiQ05LQ0UuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQogICAgY2luID4+IG4gPj4gbTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgIHsKICAgICAgICBsbCBtYXNrID0gMDsKICAgICAgICBpbnQgazsKICAgICAgICBjaW4gPj4gazsKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBrOyBqKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgeDsKICAgICAgICAgICAgY2luID4+IHg7CiAgICAgICAgICAgIHgtLTsKICAgICAgICAgICAgbWFzayArPSBCSVQoeCk7CiAgICAgICAgfQogICAgICAgIGRwW21hc2tdKys7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykKICAgICAgICBmb3IgKGludCBtYXNrID0gMDsgbWFzayA8IEJJVChtKTsgbWFzaysrKQogICAgICAgICAgICBpZiAoYml0KG1hc2ssIGkpKQogICAgICAgICAgICAgICAgZHBbbWFza10gKz0gZHBbc2V0X29mZihtYXNrLCBpKV07CiAgICBwMlswXSA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBCSVQobWF4bSk7IGkrKykKICAgICAgICBwMltpXSA9IHAyW2kgLSAxXSAqIDIgJSBNT0Q7CiAgICBmb3IgKGludCBtYXNrID0gMDsgbWFzayA8IEJJVChtKTsgbWFzaysrKQogICAgICAgIGlmIChfX2J1aWx0aW5fcG9wY291bnQobWFzaykgJSAyID09IG0gJSAyKQogICAgICAgIHsKICAgICAgICAgICAgYW5zICs9IHAyW2RwW21hc2tdXSAtIDE7CiAgICAgICAgICAgIGFucyAlPSBNT0Q7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGFucyAtPSBwMltkcFttYXNrXV0gLSAxOwogICAgICAgICAgICBhbnMgJT0gTU9EOwogICAgICAgIH0KICAgIGNvdXQgPDwgKGFucyArIE1PRCkgJSBNT0Q7Cn0K