#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main () {
	int n, x;
	cin >> n >> x;
	int upperN = max (n - 5, 0);
	int m = (1 << upperN);

	vector <int> mark (m);
	for (int i = 0; i < x; i++) {
		int s = 0, t, v;
		cin >> t;
		for (int j = 0; j < t; j++) {
			cin >> v;
			s |= 1 << (v - 1);
		}
		mark[s >> 5] |= 1 << (s & 31);
	}

	for (int s = 0; s < m; s++) {
		mark[s] |= (mark[s] & 0x55555555) << 1;
		mark[s] |= (mark[s] & 0x33333333) << 2;
		mark[s] |= (mark[s] & 0x0F0F0F0F) << 4;
		mark[s] |= (mark[s] & 0x00FF00FF) << 8;
		mark[s] |= (mark[s] & 0x0000FFFF) << 16;
		for (int k = 0; k < upperN; k++)
			if (!(s & (1 << k)))
				mark[s | (1 << k)] |= mark[s];
	}

	int total = 0;
	for (int s = 0; s < (1 << n); s++)
		if (mark[s >> 5] & (1 << (s & 31)))
			total += 1;
	cout << total << endl;

	return 0;
}
