#include using namespace std; #include using mint = atcoder::modint998244353; #include int main() { int n, m; cin >> n >> m; vector p(n); iota(p.begin(), p.end(), 0); for (int i = 0; i < m; i++) { int t; cin >> t; vector s(t); for (int j = 0; j < t; j++) { cin >> s[j]; s[j]--; } int start = p[s[t - 1]]; for (int j = t - 2; j >= 0; j--) { p[s[j + 1]] = p[s[j]]; } p[s[0]] = start; } atcoder::scc_graph g(n); int ed = 0; for (int i = 0; i < n; i++) { if (i == p[i]) { continue; } ed++; g.add_edge(i, p[i]); } if (ed == 0) { cout << 1 << endl; return 0; } auto res = g.scc(); mint sum = 1; int gd = 0; for (auto x : res) { sum *= x.size(); gd = __gcd(gd, (int)x.size()); } sum /= gd; cout << sum.val() << endl; }