#include #include #include #include #include using namespace std; const int MAX_N = 4; using bit = bitset; int main() { int n, m; cin >> n >> m; bit tmp; for (int i = 0; i < n; i++) tmp[i] = 1; vector B(n, tmp), A(m), A_c(m); for (int i = 0; i < m; i++) { int l; cin >> l; for (int j = 0; j < l; j++) { int a; cin >> a; a--; A[i][a] = 1; } A_c[i] = ~A[i]; for (int j = 0; j < n; j++) { if (A[i][j]) { B[j] &= A[i]; } else { B[j] &= A_c[i]; } } } atcoder::dsu d(n); for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { if (B[i] == B[j]) { d.merge(i, j); } } } cout << atcoder::pow_mod(2, d.groups().size(), 998244353) << endl; }