#include using namespace std; #include #include using namespace atcoder; using mint = modint998244353; void fast_io() { ios_base::sync_with_stdio(false); cin.tie(nullptr); } int main() { fast_io(); 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); vector q(t); for (int j = 0; j < t; j++) { cin >> s[j]; s[j]--; q[j] = p[s[j]]; } for (int j = 0; j < t; j++) { p[s[(j + 1) % t]] = q[j]; } } dsu uf(n); for (int i = 0; i < n; i++) { uf.merge(i, p[i]); } map cnt; for (auto gr : uf.groups()) { int sz = gr.size(); for (int i = 2; i * i <= sz; i++) { if (sz % i != 0) continue; int c = 0; while (sz % i == 0) { sz /= i; c++; } cnt[i] = max(cnt[i], c); } if (sz > 1) { cnt[sz] = max(cnt[sz], 1); } } mint ans = 1; for (auto [p, c] : cnt) { for (int i = 0; i < c; i++) { ans *= p; } } cout << ans.val() << endl; }